易截截图软件、单文件、免安装、纯绿色、仅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中N的作用?

SQL中N的作用?
exec sp_executesql N'SELECT TOP 1 ISNULL(vDefine1,'''') AS vMonth, dtBegin, dtEnd from SM_ActMonth WHERE vActID=@P1 AND bCarryForward=@P2 ORDER BY iListID DESC
', N'@P1 varchar(3),@P2 bit', '001', 1
exec sp_executesql N'SELECT * from KEHU WHERE KHDM>=@P1 AND ZK=@P2',N'@P1 VARCHAR ......

初学PL/SQL 游标

1,显示游标的操作
  
(1) 定义游标
      根据查询的数据情况,在PL/SQL块的声明部分定义游标,语法为:
         cursor cursor_name is select_statement;
注意:
     游标必须在PL/SQL块的声明部分进行定义; ......

通过批处理,实现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号