首页 > 解决方案 > SQL Server Management Studio 服务器角色

问题描述

我不知道我是在做完全错误的事情还是我只是错过了 SQL Server 安全性。

这是我尝试使用 SSMS 做的事情,这是一个简单的两级访问 ( network\DomainUsers, network\SQLAdmins)。

首先,我认为我已经通过为域用户设置新的服务器角色并分配视图和数据库/定义权限然后从公共角色中删除这些来破解它 - 不高兴!

保持相同的设置,然后我分支到表以授予权限,但同样没有乐趣。

我已经设置了多个角色/用户并应用了所有形式的权限,但是一旦公开更改数据库/定义,它就会覆盖所有内容。我认为 public 是一个默认设置,当其他角色变得活跃时,它就变得多余了?

有人可以在我的头弹出或机器学会飞行之前指出我正确的方向吗:-)

标签: sql-serverssms

解决方案


根据您实际定义角色的方式(从您的问题中不清楚),您可以简单地拒绝查看有关公共角色的任何数据库。这反过来又会使每个人都被拒绝。因为每个人都是公共角色的一部分。(这就是为什么搞乱公共角色是一个坏主意)。

否认的王牌格兰特。因此,无论您稍后授予他们什么,拒绝都会覆盖它。因此,如果您在顶层拒绝它,无论您稍后指定什么,它都会保持不变。

例外情况是,您始终可以看到您拥有的对象。并且不能拒绝 sysadmin 服务器角色的成员,因为他们总是作为所有者加入。因此,您可以通过撤销对公共数据库的查看权限在技术上隐藏所有数据库。但是随后您需要进行共享登录并将所有权分配给您想要查看的数据库。

值得注意的是,在这种情况下,这意味着他们可以在所述数据库中做任何他们想做的事情。因为你不能“否认”他们对他们拥有的东西的权利(这就是他们首先可以查看它的原因)。

总的来说,您最好在数据库级别微调角色,或者根据您想要完成的任务制作一些自定义服务器角色。

请注意,除非您弄乱了公共角色。在数据库中没有用户映射的登录无法看到数据库中的表,他们只能看到数据库本身的存在。


推荐阅读