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

问题描述 投票:16回答:7

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

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

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

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

sql-server permissions sql-server-2016 grant
7个回答
29
投票

是。

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

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

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


8
投票

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

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

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


3
投票
GRANT SELECT ON [SchemaName].[TableName] to [UserName]

2
投票

当然。 GRANT你想要的权限。

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

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


0
投票

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


-1
投票

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.