Sql server SQL Server 2008-仅允许用户访问某些表和视图

Sql server SQL Server 2008-仅允许用户访问某些表和视图,sql-server,sql-server-2008,permissions,roles,Sql Server,Sql Server 2008,Permissions,Roles,我需要允许某些用户只访问特定的视图和表。到目前为止,我已经试着跟随 创建了一个用户ex_user 创造了一个角色 deny view definition to rviewonly; 然后我执行了这个sql GRANT SELECT ON vwBI_PEOPLE TO rviewonly 它似乎可以工作,这个前用户可以对它执行select命令,但是我在ManagementStudio的视图列表中没有看到这个vwBI\u PEOPLE。我必须为该用户提供大约50个视图以及大约40个不同的

我需要允许某些用户只访问特定的视图和表。到目前为止,我已经试着跟随

  • 创建了一个用户ex_user
  • 创造了一个角色

    deny view definition to rviewonly;
    
然后我执行了这个sql

GRANT SELECT ON vwBI_PEOPLE TO rviewonly

它似乎可以工作,这个前用户可以对它执行select命令,但是我在ManagementStudio的视图列表中没有看到这个
vwBI\u PEOPLE
。我必须为该用户提供大约50个视图以及大约40个不同的表的访问权限-我希望用户能够在Management Studio的对象资源管理器中查看可用的视图和表,因为您在数据库级别拒绝了角色/用户的视图定义(未指定对象),这胜过您可能在单个对象上对…进行的任何
授权视图定义
Grant select on…
还将允许在该对象上定义视图,而无需指定
Grant view definition

我建议在数据库级别撤销:

revoke view definition to rviewonly;
只需让您的
grant select on
语句为您完成工作。运行上述命令后,不必再次运行它们<代码>视图定义本身有助于用户/角色访问元数据,而不是数据

请注意,任何
拒绝
都将始终胜过
授予
,包括拒绝角色访问但授予用户访问权限的情况,反之亦然


我刚刚在SQLServer2008R2开发盒上验证了这一点。我不确定是否存在任何可能会改变您实例行为的设置。

我以前也有过同样的问题。一、 不使用角色,只对用户本身授予select权限。这对于授予多表权限非常方便:

SELECT 'GRANT SELECT ON '+name+' TO ex_user;'
from sysobjects
where name in (

'[Enter table]',
'[names here]',
'[in a list]',
'[to grant permissions]'

)
然后复制所有结果,将其放入查询并运行。如果要授予访问权限的所有表都以相同的字母分组作为前缀,则特别方便


示例:您只需将上述查询的where子句更改为
where名称,如“TST%”
,如果您授予的所有表/视图都以“TST%”开头。

您需要将前用户添加到rviewonly角色:

然后对角色使用revoke而不是deny视图定义:

revoke view definition to rviewonly;

在我的回答中,我假设您将用户添加到了角色中,对吗?谢谢-那么我如何允许访问表呢?第二个问题:如何对用户隐藏所有“系统视图”@user18620您是否有任何授予或拒绝的权限?我没有触及公共角色,因此我猜它是默认分配的。我需要从用户或数据库中删除公共角色吗?
revoke view definition to rviewonly;