SQL Server Management Studio 2008 스크립팅 테이블 권한이 아닙니다

StackOverflow https://stackoverflow.com/questions/267375

  •  06-07-2019
  •  | 
  •  

문제

SQL Server Management Studio 2008은 객체 레벨 권한을 스크립트하는 옵션을 선택하더라도 스크립팅 테이블 권한이 아닙니다. 이것은 버그입니까 아니면 이것을하는 다른 방법이 있습니까? 저장된 Procs에 대한 권한을 만들지 만 테이블에는 허가가 아닙니다. 나는 sysadmin입니다.

작동하지 않으면 권한을 스크립팅 할 수있는 무료 SQL Server 도구가 있습니까?

도움이 되었습니까?

해결책

SQL Server 포럼 사이트 중 하나 에서이 편리한 스크립트를 발견했지만 다시 찾을 수 있다면 버그가 됐습니다.

CREATE VIEW [dbo].[viw_DBPerms] AS
SELECT 
    CASE 
            WHEN o.type = 'P' THEN 'Stored Procedure' 
            WHEN o.type = 'TF' THEN 'Table Function' 
            WHEN o.type = 'FN' THEN 'Scalar Function' 
            WHEN o.type = 'U' THEN 'Table'
            WHEN o.type = 'V' THEN 'View' 
            WHEN o.type = 'SQ' THEN 'Service Queue'
            ELSE o.type
    END AS [Type],
    s.name AS [Schema], 
    o.name AS [Object],
    pr.name AS [User], 
    pe.permission_name AS Permission
FROM sys.database_permissions pe
LEFT JOIN sys.database_principals pr ON pe.grantee_principal_id = pr.principal_id
JOIN 
    (   SELECT [object_id] AS [id], [name], type, schema_id, 1 AS [class] FROM sys.objects 
        UNION 
        SELECT [service_id] AS [id], [name] COLLATE SQL_Latin1_General_CP1_CI_AS [name], 'Service', '0', 17 AS [class] FROM sys.services 
        UNION
        SELECT [service_cONtract_id] AS [id], [name], 'Service Contract', '0', 16 AS [class] FROM sys.service_contracts
        UNION
        SELECT [message_type_id] AS [id], [name], 'Message Type', '0', 15 AS [class] FROM sys.service_message_types
    ) o 
    ON pe.major_id = o.id AND pe.class = o.class
LEFT JOIN sys.schemas s ON o.schema_id = s.schema_id

... 그냥 사용하기 만하면됩니다.

SELECT Object, 
    SUM(CASE Permission WHEN 'SELECT' THEN 1 ELSE 0 END) AS 'SELECT',
    SUM(CASE Permission WHEN 'INSERT' THEN 1 ELSE 0 END) AS 'INSERT',
    SUM(CASE Permission WHEN 'UPDATE' THEN 1 ELSE 0 END) AS 'UPDATE',
    SUM(CASE Permission WHEN 'DELETE' THEN 1 ELSE 0 END) AS 'DELETE',
    SUM(CASE Permission WHEN 'ALTER' THEN 1 ELSE 0 END) AS 'ALTER'
FROM viw_DBPerms
WHERE [User] = '<sqluser>'
GROUP BY Object

이것은 SQL 2005에서 작동하며 SQL 2008에서 잘 작동 할 것으로 기대합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top