Роль Разрешения Отфильтрованное Представление t-sql - PullRequest
0 голосов
/ 14 января 2010

Можно ли фильтровать содержимое представления t-sql на основе SELECT GRANTS, назначенных ролям базы данных конечных пользователей, без создания исключений разрешений SELECT?

Если так, то как?

Псевдо:

CREATE TABLE Beer(a(x), b(y)); GRANT SELECT ON Beer to BeerOnlyRole;
CREATE TABLE Wine(a(x), b(y)); GRANT SELECT ON Wine to WineAndBeerRole; 
GRANT SELECT ON Beer to WineAndBeerRole;

CREATE VIEW SimpleAlcoholSearch
 (
    SELECT  a  AS BrandName
           ,b  AS Strength
    FROM Beer

    UNION

    SELECT  a  AS BrandName
           ,b  AS Strength
     FROM Wine
 )

 GRANT SELECT ON SimpleAlcoholSearch to BeerOnlyRole;
 GRANT SELECT ON SimpleAlcoholSearch to WineAndBeerRole;

....

AS BeerOnlyRole: SELECT * FROM SimpleAlcoholSearch: ПИВО1 1% ПИВО2 2%

КАК WineAndBeerRole: SELECT * FROM SimpleAlcoholSearch: ПИВО1 1% ПИВО2 2% ВИНО1 10% ВИНО2 11%

Спасибо, что прочитали это ...

1 Ответ

0 голосов
/ 15 января 2010

Я решил эту проблему с помощью быстрой и грязной проверки различных представлений каталога для каждой таблицы:

SELECT  a  AS BrandName
           ,b  AS Strength
    FROM Beer   

WHERE 1 = 

    (
         SELECT TOP 1 1
         FROM sys.database_permissions sy_dpe

         JOIN sys.objects sy_o ON sy_dpe.major_id = sy_o.object_id
         JOIN sys.schemas sy_sc ON sy_o.schema_id = sy_sc.schema_id
         JOIN sys.database_principals sy_dpr ON sy_dpe.grantee_principal_id = sy_dpr.principal_id
         JOIN sys.database_role_members sy_drm ON sy_drm.role_principal_id = sy_dpr.principal_id
         JOIN sys.database_principals sy_dpr2 ON sy_dpr2.principal_id = sy_drm.member_principal_id

         WHERE sy_dpr2.name = SYSTEM_USER
         AND sy_o.name = 'Beer'
         AND sy_sc.name = '[n]'
         AND sy_dpe.type = 'SL'
         AND sy_dpe.state = 'G'
    )

UNION

....

Кто-нибудь получил более аккуратный подход?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...