2016-11-20 6 views
0

Ich habe die folgende Ansicht (genannt view3)GRANT Berechtigungen scheinen nicht auf einen Blick zu arbeiten

enter image description here

ich eine Rolle erstellt und gewährt es SELECT und UPDATE Rechte nur auf zwei Säulen.

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

Dann zugewiesen ich die Rolle an einen Benutzer (test) bereits

erstellt
ALTER ROLE Testrole ADD MEMBER test 

Aber wenn die Transaktion zu überprüfen, ob alles ok ist, ausgeführt wird, werden alle Spalten anstelle der beiden erforderlichen gezeigt werden (das gleiche Bild oben).

Dies ist das Skript

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 

Antwort

1

GRANT Berechtigungen sind kumulativ. Diese Symptome legen nahe, dass Berechtigungen auf Ansichtsebene (alle Spalten) vorhanden sind, die von dieser oder anderen Rollen geerbt wurden. Führen Sie die Abfrage unten aus, um festzustellen, ob dies der Fall ist.

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

ich es lief, und es zeigt: 'PERMISSION_NAME: SELECT Objektname: view3 Spaltenname: Alle Spalten Grantee: test' , dass diese irgendwie suggeriert ich' gewährt test' SELECT Privileg alle Spalten? Wie kann das möglich sein, wenn ich das nicht explizit getan habe? Wie kann das behoben werden (ich meine, das SELECT- oder UPDATE-Privileg nicht auf alle Spalten zu beschränken)? – Jazz

+0

Wenn Sie 'REVOKE SELECT ON view3 FROM test 'setzen und alle erneut ausführen, bleibt das Problem bestehen. – Jazz

+0

Versuchen Sie, 'REVOKE SELECT ON view3 FROM test' auszuführen, verifizieren Sie' SELECT' by user test fehlgeschlagen, da keine Berechtigungen vorhanden sind, und erteilen Sie dann erneut die Spaltenberechtigungen. Ich würde erwarten, dass nur ein 'SELECT' mit den gewährten Spalten gelingen wird. –

Verwandte Themen