SQL SERVER数据库中guest数据库用户的意义
SQL Server 中的guest数据库用户每个SQL数据库中都有一个guest用户. 对于这个数据库用户, 文档上的说明都不甚清楚, 甚至会让人产生错误的理解, 比如SQL联机丛书中对于guest用户的说明可以参考:guest User. 这篇文章中提到在各个数据库中都可以添加/删除guest用户(master及tempdb的guest用户不能删除, 因为绝大多数数据库操作都需要访问这两个数据库), 并且对于新建的数据默认是不存在guest用户的. 但是我们新建一个数据库, 会发现guest用户依然存在啊, 只不过其DatabaseAccess属性变成'Via group membership'了(在SQL2005中会发现guest用户图标上有一个被禁用的图标). 这是因为guest用户(SID为0x00)是不能添加/删除的, 只能启用/禁用. 可以调用以下命令来启用/禁用某数据库的guest用户:
EXEC sp_grantdbaccess 'guest'
EXEC sp_revokedbaccess 'guest'
看一下sp_grantdbaccess/sp_revokedbaccess的用法的话, 会发现这种形式是把guest做为login来用的, 而在SQL的logins集合里是找不到guest这个login的. 总结下来应该是每个SQL实例上都存在guest 这个隐藏的login, 不能删除也无法直接用其登录. 其作用就是映射到各个数据库的guest用户上, 当启用guest用户时可以实现数据库的匿名访问(即使本来在某数据库上没有"访问权限/用户映射"的帐号能以guest身份访问该数据库),类似于操作系统的NT AUTHORITY\ANONYMOUS LOGON. 这个设计是非常合理的, 可惜没有详细的文档说明.
页:
[1]