我认为答案是否定的,但我希望有人访问SQL Server
数据库,但我真的希望他们可以访问一个表。
很容易限制某人只访问一个数据库,但不知道我是否可以限制到一个表。
我的想法是用另一个表的同义词创建另一个数据库,然后限制对该数据库的访问,但我想知道是否有人能想到更好的方法。
我也不相信它会起作用,因为我认为存在权限冲突。
答案 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)
答案 4 :(得分:0)
当然可以。创建用户并授予他们访问数据库权限后,只授予该表的select访问权限(或他们需要的任何级别)。
答案 5 :(得分:-1)
更好的方法是创建单独的schema
,在proc
中创建schema
。然后允许用户EXEC
proc
。就是这样。您可以在view
中创建schema
,这可能更符合您的目标。
答案 6 :(得分:-1)
更好的方法是为特定表创建安全措施。 IT部门会问你要保护什么;表,视图,数据库。然后,您选择要保护的特定表,并从该表中排除该用户。