sql-server - SQL Server Management Studio 服务器角色
问题描述
我不知道我是在做完全错误的事情还是我只是错过了 SQL Server 安全性。
这是我尝试使用 SSMS 做的事情,这是一个简单的两级访问 ( network\DomainUsers
, network\SQLAdmins
)。
- 域用户将无法查看 SSMS 中的任何表,但可以通过应用程序访问数据。
- SQLAdmins 查看全部
首先,我认为我已经通过为域用户设置新的服务器角色并分配视图和数据库/定义权限然后从公共角色中删除这些来破解它 - 不高兴!
保持相同的设置,然后我分支到表以授予权限,但同样没有乐趣。
我已经设置了多个角色/用户并应用了所有形式的权限,但是一旦公开更改数据库/定义,它就会覆盖所有内容。我认为 public 是一个默认设置,当其他角色变得活跃时,它就变得多余了?
有人可以在我的头弹出或机器学会飞行之前指出我正确的方向吗:-)
- SSMS:v17.8.1
- SQL 服务器:2012
解决方案
根据您实际定义角色的方式(从您的问题中不清楚),您可以简单地拒绝查看有关公共角色的任何数据库。这反过来又会使每个人都被拒绝。因为每个人都是公共角色的一部分。(这就是为什么搞乱公共角色是一个坏主意)。
否认的王牌格兰特。因此,无论您稍后授予他们什么,拒绝都会覆盖它。因此,如果您在顶层拒绝它,无论您稍后指定什么,它都会保持不变。
例外情况是,您始终可以看到您拥有的对象。并且不能拒绝 sysadmin 服务器角色的成员,因为他们总是作为所有者加入。因此,您可以通过撤销对公共数据库的查看权限在技术上隐藏所有数据库。但是随后您需要进行共享登录并将所有权分配给您想要查看的数据库。
值得注意的是,在这种情况下,这意味着他们可以在所述数据库中做任何他们想做的事情。因为你不能“否认”他们对他们拥有的东西的权利(这就是他们首先可以查看它的原因)。
总的来说,您最好在数据库级别微调角色,或者根据您想要完成的任务制作一些自定义服务器角色。
请注意,除非您弄乱了公共角色。在数据库中没有用户映射的登录无法看到数据库中的表,他们只能看到数据库本身的存在。
推荐阅读
- github - 如何创建脚本以将您的构建发布到 github 上的文档?
- html - 为打印设置 CSS 样式时更改引导网格
- c# - 如何在 Visual Studio 2019 中连接到 MySQL 数据源?
- ios - 无法将 Fabric 应用链接到 Firebase Crashlytics
- google-apps-script - 使用 Google Apps 脚本嵌入图表的一些选项
- python - 如何修复 Python 中的“过度采样”错误
- scikit-learn - 同时预测
- angularjs - $scope 与 $ctrl 有什么区别,什么时候应该使用?
- javascript - 单击类时附加元素
- java - 如果没有构造函数,我怎样才能让这段代码发挥同样的作用?