当对数据库用户这个参数执行SETUSER命令的时候,你将扮演这个用户直到你改变了数据库或者执行SETUSER命令时不再需要任何参数。
可选参数WITH NORESET不允许再使用先前的用户名。如果你运行SETUSER命令的时候使用了WITH NORESET参数,那么当你执行SETUSER命令不带任何参数时,你会接受到一个错误;这个错误会一直持续,一直到SETUSER命令被拒绝。
USE pubs
GO
SELECT SUSER_SNAME(), CURRENT_USER
GO
SETUSER 'guest' WITH NORESET
GO
SELECT SUSER_SNAME(), CURRENT_USER
GO
SETUSER
GO
这个命令不能在Windows上使用;但是,如果你用域用户名登陆SQL Server你就可以扮演数据库用户的名字。换言之,如果你使用NT用户作为SQL Server用户,你可以模仿这个数据库用户。
下面的脚本将演示如何用Windows用户模仿数据库用户。在执行这个脚本之前,你需要用标志代替域名和Windows用户名。
USE pubs
GO
SELECT SUSER_SNAME(), CURRENT_USER
GO
EXEC sp_grantlogin '<domain name> <user name>'
GO
EXEC sp_grantdbaccess '<domain name> <user name>', 'ExampleUser'
GO
DENY SELECT ON authors TO public
GO
SETUSER 'ExampleUser'
GO
SELECT SUSER_SNAME(), CURRENT_USER
GO
SELECT * FROM authors
GO
SETUSER
GO
SELECT SUSER_SNAME(), CURRENT_USER
GO
SELECT * FROM authors
GO
EXEC sp_revokedbaccess @name_in_db = 'ExampleUser'
GO
EXEC sp_revokelogin '<domain name> <user name>'
GO