我认为答案是否定的,但我想让某人访问SQL Server数据库,但我只希望他们有权访问一个表。SQL Server:你可以限制只有一个表的访问
很容易限制某人只访问一个数据库,但不知道我是否可以限制为一个表。
我的想法是创建另一个数据库与另一个表的同义词,然后限制对该数据库的访问,但我想知道是否有人可以想出更好的方法。
我也不相信它会工作,因为我认为会有权限冲突。
谢谢
我认为答案是否定的,但我想让某人访问SQL Server数据库,但我只希望他们有权访问一个表。SQL Server:你可以限制只有一个表的访问
很容易限制某人只访问一个数据库,但不知道我是否可以限制为一个表。
我的想法是创建另一个数据库与另一个表的同义词,然后限制对该数据库的访问,但我想知道是否有人可以想出更好的方法。
我也不相信它会工作,因为我认为会有权限冲突。
谢谢
是。
exec sp_msforeachtable "DENY SELECT ON '?' TO [username];"
GO
GRANT SELECT ON [schemaName].[tableName] to [username]
Go
虽然这工作,你很可能会关闭使用roles和AD组管理权限更好。
太棒了,谢谢。我会放弃这一点。 – 2012-03-23 10:25:35
这如何保护其余表格? – 2012-09-24 21:33:18
它不,这就是为什么答案没有被标记为接受,而接受的答案是。不知道你是否问我这个问题,指出我在这个答案的几个奇怪的原因之后出现了错误,我已经忘记了,无论哪种方式,希望我的评论能够帮助。 – kd7 2012-09-24 22:53:19
对不起,这个问题在聊天中引起了我的注意。当我评论说我实际上并没有意识到问题到底有多大。不过,我认为无论其接受状态或投票数量如何,都可以质疑原始问题的答案方面。许多问题没有被接受的答案,而这个问题仍然存在,因为答案意在帮助OP *和*未来的读者。他们中的许多人可能会认为页面上的任何答案都是答案。 – 2012-09-24 22:56:21
当然可以。创建用户并授予他们对数据库的访问权限后,只向该表格授予选择访问权限(或者他们需要的任何级别)。
循环遍历所有表格并拒绝访问的问题是如果您添加一个新表格。
重要的是不要让用户的db_datareader访问整个数据库。使用用户界面,您可以使用登录下的用户映射选项卡,您只能以“公共”访问权限创建用户。然后,您可以访问数据库并授予该用户对特定表的SELECT访问权限(通过单击Securables选项卡下奇怪名称的“搜索”按钮)。
这种方法当然也适用于脚本。
更好的方法是创建一个单独的schema
,在schema
中创建一个proc
。然后允许用户EXEC
即proc
。而已。你可以在schema
中创建一个view
,这可能更像是你之后的东西。
更好的方法是创建安全的特定表。 IT会问你要保证什么?表,视图,数据库。然后,您选择特定的表来确保并从该表中排除该用户。
如果您愿意,您可以授予人们对单个*列*的访问权限,创建他们的登录名并在您的表上授予选择权限 – 2012-03-20 12:52:19