SQL Server:您是否可以限制只能访问一个表

时间:2012-03-20 12:48:06

标签: sql-server permissions sql-server-2016 grant

我认为答案是否定的,但我希望有人访问SQL Server数据库,但我真的希望他们可以访问一个表。

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

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

我也不相信它会起作用,因为我认为存在权限冲突。

7 个答案:

答案 0 :(得分:27)

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

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

虽然可行,但使用roles和AD组管理权限可能会更好。

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:3)

GRANT SELECT ON [SchemaName].[TableName] to [UserName]

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

更好的方法是创建单独的schema,在proc中创建schema。然后允许用户EXEC proc。就是这样。您可以在view中创建schema,这可能更符合您的目标。

答案 6 :(得分:-1)

更好的方法是为特定表创建安全措施。 IT部门会问你要保护什么;表,视图,数据库。然后,您选择要保护的特定表,并从该表中排除该用户。