易截截图软件、单文件、免安装、纯绿色、仅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 SERVER触发器恢复方法、数据库

触发器
触发器是一种特殊类型的存储过程,它不同前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用。触发器是一个功能强大的工具,它使每个站点可以在有数据修改时自动强制执行其业务规则。触发器可以用于SQL Server约束、默认值和规则的完整性检查。
当往某一 ......

SQL SERVER 视图操作数据库

视图操作
视图是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。与真实的表一样,视图也包括几个被定义的数据列和多个数据行,但这些数据实际上是被其引用的其他表中的数据。因此,视图不是真实存在的基础表,而是一个虚拟的表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存 ......

SQL SERVER 视图操作数据库

视图操作
视图是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。与真实的表一样,视图也包括几个被定义的数据列和多个数据行,但这些数据实际上是被其引用的其他表中的数据。因此,视图不是真实存在的基础表,而是一个虚拟的表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存 ......

SQL中常见函数的用法

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

sql 中 case when 语法(转)


sql
中 case when 语法
sql语言中有没有类似C语言中的switch case的语句??
 
没有,用case   when   来代替就行了.   
       
  例如,下面的语句显示中文年月  
   
 
select   getdate()   as &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号