SQL Server Management Studio 2008 no tiene permisos de tabla de secuencias de comandos

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Sql Server Management Studio 2008 no tiene permisos de tabla de secuencias de comandos, incluso cuando selecciono la opción de permisos de nivel de objeto de secuencia de comandos. ¿Es esto un error o hay otra forma de hacerlo? Está creando permisos para procesos almacenados, pero no para tablas. Soy un administrador de sistemas.

Si no funciona, ¿hay herramientas de servidor SQL gratuitas para ejecutar los permisos?

¿Fue útil?

Solución

Encontré este útil script en uno de los sitios del foro de SQL Server, pero me molesta si puedo encontrarlo de nuevo:

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

... luego simplemente use:

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

Esto funciona en SQL 2005 y espero que funcione bien en SQL 2008.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top