2012-03-20 118 views
14

我认为答案是否定的,但我想让某人访问SQL Server数据库,但我只希望他们有权访问一个表。SQL Server:你可以限制只有一个表的访问

很容易限制某人只访问一个数据库,但不知道我是否可以限制为一个表。

我的想法是创建另一个数据库与另一个表的同义词,然后限制对该数据库的访问,但我想知道是否有人可以想出更好的方法。

我也不相信它会工作,因为我认为会有权限冲突。

谢谢

+7

如果您愿意,您可以授予人们对单个*列*的访问权限,创建他们的登录名并在您的表上授予选择权限 – 2012-03-20 12:52:19

回答

20

是。

exec sp_msforeachtable "DENY SELECT ON '?' TO [username];" 
GO 

GRANT SELECT ON [schemaName].[tableName] to [username] 
Go 

虽然这工作,你很可能会关闭使用roles和AD组管理权限更好。

+0

太棒了,谢谢。我会放弃这一点。 – 2012-03-23 10:25:35

3
​​
+1

这如何保护其余表格? – 2012-09-24 21:33:18

+0

它不,这就是为什么答案没有被标记为接受,而接受的答案是。不知道你是否问我这个问题,指出我在这个答案的几个奇怪的原因之后出现了错误,我已经忘记了,无论哪种方式,希望我的评论能够帮助。 – kd7 2012-09-24 22:53:19

+2

对不起,这个问题在聊天中引起了我的注意。当我评论说我实际上并没有意识到问题到底有多大。不过,我认为无论其接受状态或投票数量如何,都可以质疑原始问题的答案方面。许多问题没有被接受的答案,而这个问题仍然存在,因为答案意在帮助OP *和*未来的读者。他们中的许多人可能会认为页面上的任何答案都是答案。 – 2012-09-24 22:56:21

0

当然可以。创建用户并授予他们对数据库的访问权限后,只向该表格授予选择访问权限(或者他们需要的任何级别)。

2

当然可以。 GRANT你想要的权限。

当您授予用户对数据库的访问权限时,请查看它们分配的角色以及这些角色拥有的权限。

问题是人们通常在开始时授予过宽的权限。

5

循环遍历所有表格并拒绝访问的问题是如果您添加一个新表格。

重要的是不要让用户的db_datareader访问整个数据库。使用用户界面,您可以使用登录下的用户映射选项卡,您只能以“公共”访问权限创建用户。然后,您可以访问数据库并授予该用户对特定表的SELECT访问权限(通过单击Securables选项卡下奇怪名称的“搜索”按钮)。

这种方法当然也适用于脚本。

-1

更好的方法是创建一个单独的schema,在schema中创建一个proc。然后允许用户EXECproc。而已。你可以在schema中创建一个view,这可能更像是你之后的东西。

-1

更好的方法是创建安全的特定表。 IT会问你要保证什么?表,视图,数据库。然后,您选择特定的表来确保并从该表中排除该用户。

相关问题