易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL Server 的模拟

SQL Server 的模拟
专栏作家:Deanna Dicken 2010年2月12日
翻译:    UltraDBA      2010年5月25日
原帖地址:http://www.databasejournal.com/features/mssql/article.php/3863516/SQL-Server-Impersonation.htm
介绍
SQL Server 的模拟,或上下文切换,是一种方式,允许当前用户模拟给定用户或登录的权限,直到上
下文重置,设置回另一个用户,或会话结束。接下来,我们将讨论两种实现这项任务的机制并完成一些
实例。
SETUSER
在 SQL Server 2000 中,如果你有需要用到安全上下文切换,你只有一个选择:SETUSER。用给定的用
户名执行语句,临时设置允许提供账户执行的权限。多个调用能够被使用,安全上下文切换通过调用不
带用户名的 SETUSER 语句重置回原来的上下文环境。
许可
与联机帮助相反的是,一个账号想调用 SETUSER 必须拥有 sysadmin 服务器角色。联机帮助错误的描
述用户拥有 dbo 权限也能利用这个语句,然后这是不行的。
示例
下面的例子展示了安全上下文切换从当前登录账号 adminacct,切换到一个 SQL 登录,再到另一个
SQL 登录,然后切换回来。注意,安全上下文是通过执行不带用户名的 SETUSER 语句切换回安全上下
文到当前登录账号。
SERTUSER 'jdoe'
SELECT SUSER_SNAME()
SERUSER 'jschmoe'
SELECT SUSER_SNAME()
SETUSER
SELECT SUSER_SNAME()
结果:
-----------------------------------
jdoe
(所影响行数为 1 行)
-----------------------------------
jschmoe
(所影响行数为 1 行)
-----------------------------------
adminacct
(所影响行数为 1 行)
在上面的示例中,要注意的是 jdoe 必须具有 sysamdin 角色的权限才能执行成功 SETUSER 'jschmoe'
命令。如果 jdoe 没有 sysadmin 权限,将抛出如下错误。
Msg 15157,Level 16,State 1,Line 3
Setuser因为如下原因失败:
数据库主体 'jschmoe' 不存在,
对应的服务器主体不存在服务器的访问,
此类型数据库主体不能被模拟,
或者你没有权限。
SETUSER 有一个可选参数 WITH NORESET,用在上面的示例中可以模拟上下文不被重置到开始的
sysadmin。再一次以 adminacct 登录,执行如下脚本。
SETUSER 'jdoe' WITH NORESET
SELECT SUSER_SNAME()
SETUSER 'jschmoe'
SELECT SUSER_SNAME()
SETUSER
SELECT SUSER_SNAME()
结果:
-----------------------------------
jdoe
(所


相关文档:

SQL面试题

1、两表,一张有上百万的数据(表A),另一张只有一万多条数据(表B),A表的外键关联到B表的主键上。
问下面两条SQL语句,那条性能更高?
(1)SELECT A.ID, B.ID from A, B WHERE A.FID = B.ID
(2)SELECT A.ID, B.ID from B, A WHERE A.FID = B.ID ......

SQL知识大杂烩


$$$为每节的开始
-------------------------------------------------------------------------------------------------------------------------------------------------
$$$ SQL中系统临时表的使用和禁忌 及 Exec(SQLScript) 的使用
以前在SQL 中写SP 时,如比较复杂时,喜欢中间使用临时表来暂存相关记录,这样的 ......

SQL中常见函数的用法

1Replace函数
在SQL SERVER 2000中有一个信息表,存放新闻信息,现在客户想批量更新这个字段中的某些文字,替换为其他文字。
解决方法:利用replace函数
update detail set content=replace(content,'原文字','替换后文字') where 条件 ......

Sql语句学习笔记(7) 常用日期函数

/*****************************
常用日期函数
*****************************/
use studentInfo
--向数据库中插入日期的常见格式:如插入2010年10月3日这个日期
--其中tb_date为一个测试用的表,里面就一个字段time,为datetime类型
insert tb_date values('2010.10.3')
insert tb_date values('2010-10-3 12:14:35 ......

通过批处理,实现SQL Server数据库定期备份到ftp

@echo off
rem --------------------- 配置: ftp上传参数,及本地文件目录(数据库备份的临时目录)-----------------
set "PUT_FTP_SERVER=192.168.1.100"
set "PUT_FTP_PORT=21"
set "PUT_FTP_USERNAME=ftpuser"
set "PUT_FTP_PASSWORD=ftppasswd"
set "PUT_DIR=/"
set "LOCAL_DIR=D:\sql_dbbackup\"
rem ---------- ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号