如何模仿数据库用户

ZDNet软件频道 时间:2003-11-24 作者:ZDNet China |  我要评论()
本文关键词:
SETUSER T-SQL是一条模仿使用数据库的用户的命令,这条命令可以测试数据库的安全性。但是微软公司却反对使用这个命令。
本文译自Builder.com,未经许可请勿转载 SETUSER T-SQL是一条模仿使用数据库的用户的命令,这条命令可以测试数据库的安全性。但是微软公司却反对使用这个命令,因为尽管这个在当前使用很有空间,但是它可能不能完全释放。

当对数据库用户这个参数执行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



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134