我不知道我做的事情是完全错误的还是只是缺少SQL Server安全性。
这是我要使用SSMS进行的操作,这是一种简单的两级访问(network\DomainUsers
,network\SQLAdmins
)。
首先,我想为域用户设置一个新的服务器角色并分配视图和数据库/定义权限,然后将其从公共角色中删除,这让我感到很困惑-没关系!
然后使用相同的设置,我会分支到该表以授予权限,但又没有喜悦。
我已经设置了几个角色/用户并应用了所有形式的权限,但是一旦在公共场所更改了数据库/定义,它将覆盖所有内容。我以为public是一个默认设置,当其他角色变为活动状态时,它就会变得多余?
有人可以将我指向正确的方向,否则我的头突然弹出或机器学会飞行:-)
取决于您实际定义角色的方式(问题尚不清楚),可能只是您拒绝查看有关公共角色的任何数据库。反过来,这将使每个人都被拒绝。因为每个人始终都是公共角色的一部分。 (这就是为什么不愿担任公共角色的想法)。
丹尼的王牌格兰特。因此,无论您以后授予他们什么,拒绝都将覆盖它。因此,如果您在最高级别拒绝它,则无论以后如何指定,它都将保持这种状态。
例外是,您始终可以看到自己拥有的对象。不能拒绝sysadmin服务器角色的成员,因为他们总是以所有者身份进入。因此,从技术上讲,您可以通过撤消对公共数据库的查看权限来隐藏所有数据库。但是随后您需要进行共享登录,并将所有权分配给您希望可见的数据库。
值得注意的是,在这种情况下,这意味着他们可以在上述数据库中执行所需的任何操作。由于您不能以自己拥有的东西“拒绝”他们的权利(这就是为什么他们可以首先查看它的原因)。
总的来说,最好在数据库级别上微调角色,或者根据要完成的任务来定制一些服务器角色。
注意,除非您弄乱了公共角色。在数据库中没有用户映射的登录名看不到数据库中的表,只能看到数据库本身的存在。