我有一个约50个数据库的SQL服务器实例。 一个开发者叫他Joe,想要访问一个现有的数据库。 所以我在sql server 2005 management studio中创build了一个新的login帐户,在用户映射部分我指定他有权访问这个数据库。
login后,我们注意到他可以访问任何数据库并打开所有的表格,删除表格等。
如何限制他而不使他成为数据库的db_owner? 这与angular色的“公共”访问有关吗?
下面是我采取的步骤进入pipe理工作室,并进入安全 – >login和右键单击并添加一个新的“login”。 select“Windows身份validation”。 在用户映射选项卡中,我select了他应该访问的数据库,认为这将使他只能访问这个数据库。
然后我启动了pipe理工作室,并以他的身份login(Windows身份validation),他可以打开并查看所有数据库中的所有表? 但我不想让他访问所有这些?
听起来像Joe是一个域组的成员,它对SQL Server拥有比你想要的更多的权限,或者你已经搞乱了服务器上其他数据库中公共angular色的权利。 无论哪种情况,您都需要找出额外权利的来源,以便解决这些问题。
您可以使用存储过程xp_logininfo来查看Joe能够通过哪些域组访问数据库。
exec xp_logininfo 'YourDomain\JoesUserName'
如果这样做不能指向正确的方向,则需要查看授予其他数据库中公共angular色的权限。
他们有更多的权利,那么你期望的。
这不是Windows身份validation,但权限。
要在所有数据库中查看,意味着它们在服务器级别具有“系统pipe理员”权限,或者可以通过Windows组进行访问。 通常情况下,有人可以看到所有的数据库,但试图扩大它会得到一个错误。 没有错误=分配了一些权限。
而“DROP”是指系统pipe理员适用于所有数据库。
“Joe”是SQL Admin组的成员吗?