新手问题:我有一位设计师从 SQL Server [2008] 数据库中读取信息。我已经为他设置了一些视图来提取他的数据并授予他的用户一个 db_dataread 角色的成员。他的程序使用 ODBC 连接来获取数据。
然而,这允许他对所有表和系统视图和表进行读取访问,这需要用户进行不必要的搜索和混淆。
有没有办法限制他只能看到我为他创建的少数视图?
[编辑:我创建了一个新的测试用户和一个新的测试 ODBC 连接,根本不授予任何权限,结果也没有变化。根据我的阅读,这是因为所有用户都是 PUBLIC 服务器角色的一部分。公共角色似乎赋予所有系统对象 SELECT 特权。还有人知道吗?]
从 db_datareader 角色中删除该用户,并为其创建针对您为其创建的视图的 SELECT 权限。您没有提及 SQL Server 的哪个版本,但起点总是打开用户的属性屏幕并查找显示权限的内容。
CodeByMoonlight 是正确的。您需要删除 db_datareader 角色。
您在这里有几个不同的选择:
按照 CodeByMoonlight 的建议进行操作,并仅授予用户对您希望他拥有的视图的选择权限。如果您从不打算让任何其他用户需要访问相同类型的东西,这很好。
创建一个 Schema 并为其分配 CodeByMoonlight 建议的权限。这将允许您将相同的访问权限授予另一个人。
2008 架构权限链 = Server.DB.Schema.Object