2016-11-20 11 views
0

工作,我有以下几点看法(所谓view3授予权限似乎无法在视图

enter image description here

我创建了一个角色,并授予它只是SELECTUPDATE权利两列。

CREATE ROLE Testrole 
GRANT SELECT (Doc_ID, [Total Attentions]) ON view3 TO Testrole 

然后我分配的作用,已创建

ALTER ROLE Testrole ADD MEMBER test 

但是用户(test)检查时,如果一切正常的交易执行,所有的列显示,而不是需要的两个(上面的图像相同)。

这是脚本

CREATE LOGIN logtest 
    WITH PASSWORD = 'logtest' 

CREATE USER test 
    FOR LOGIN logtest 

CREATE ROLE Testrole 
GRANT SELECT (Doc_ID, [Total Attentions]) ON view3 TO Testrole 
ALTER ROLE Testrole ADD MEMBER test 


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

BEGIN TRANSACTION 
    EXECUTE AS USER = 'test' 

    SELECT * /*This should give an error*/ 
     FROM view3 

    SELECT Doc_ID, [Total Attentions] /*This should work just fine*/ 
     FROM view3 

    REVERT 

ROLLBACK 

回答

1

授予权限是累积的。这些症状表明存在视图级别(所有列)权限,从此角色或其他角色继承。运行下面的查询来查看是否是这种情况。

SELECT 
     permission_name 
    , OBJECT_NAME(major_id) AS ObjectName 
    , CASE WHEN c.name IS NULL THEN 'All Columns' ELSE c.name END AS ColumnName 
    , USER_NAME(grantee_principal_id) AS Gratee 
FROM sys.database_permissions AS p 
LEFT JOIN sys.columns AS c ON 
    c.object_id = p.major_id 
    AND c.column_id = p.minor_id 
WHERE 
    major_id = OBJECT_ID(N'view3'); 
+0

我跑了它,它表明: 'PERMISSION_NAME:SELECT OBJECTNAME:VIEW3 的ColumnName:所有列 承授人:test' 这表明,不知何故,我授予'test' SELECT权限所有列?如果我没有明确地这样做,怎么可能呢?如何解决这个问题(我的意思是,将SELECT或UPDATE特权限制在所有列中)? – Jazz

+0

通过将'REVOKE SELECT ON view3 FROM test'并再次执行,问题依然存在。 – Jazz

+0

尝试执行'REVOKE SELECT ON view3 FROM test',验证由于没有权限,用户测试失败导致SELECT'失败,然后再次授予列权限。我希望只有具有授权列的SELECT才能成功。 –