Tengo un problema para configurar el VIEW DEFINITION
permiso de manera adecuada en el nivel de esquema para uno de mis usuarios. Creé el esquema TestSchema
y agregué algunas tablas. El usuario actualmente tiene permisos establecen para el acceso y modificar la tabla ( SELECT
, UPDATE
, DELETE
, etc) a través de las dbo_datareader
y dbo_datawriter
roles. Sin embargo, no pueden ver ninguna de las tablas en el explorador de objetos SSMS.
Intenté otorgar permisos para ver definiciones:
grant view definition on SCHEMA :: [TestSchema] to [User]
Eso no funcionó. Intenté establecer el permiso de nivel de tabla:
grant view definition on [TestSchema].[NewTable] to [User]
Eso tampoco funcionó. Luego probé solo una subvención general:
grant view definition to [User]
Y que lo hizo el trabajo; ahora pueden ver TestSchema
, así como otros esquemas a los que no deberían tener acceso.
Mi objetivo aquí es permitir que el usuario vea todas las tablas dentro de un esquema dado. ¿Cómo lo logro? Si debería poder hacer esto de manera predeterminada, ¿qué permisos debería estar buscando para encontrar por qué no puedo?
Respuestas:
Respuesta corta: no use
db_datareader
odb_datawriter
o sus equivalentes negar. Son solo para compatibilidad con versiones anteriores. Usarlos causará problemas como el que estás enfrentando.Si desea otorgar a la directora Alice los permisos SELECCIONAR, INSERTAR, ACTUALIZAR y ELIMINAR a todos los objetos con valores de tabla en el esquema de Ventas, utilice lo siguiente.
Si desea otorgarle a la directora Alice los permisos SELECT, INSERT, UPDATE y DELETE a todos los objetos con valores de tabla en todos los esquemas, utilice lo siguiente.
La visibilidad de los metadatos funcionará correctamente.
fuente
Eche un vistazo a los principales otros permisos, puede haber una denegación en algún lugar que esté causando el problema. Recuerde que una denegación siempre se aplicará sobre la parte superior de una subvención. Y como no es su servidor, puede haber algo en la cuenta que el departamento de TI ha configurado.
Use algo como esto para el nivel del servidor:
Y algo así a nivel de base de datos
fuente
Esto me sucedió cuando actualicé nuestro SQL Server de 2008R2 a 2014. db_datareader o db_datawriter o sus equivalentes denegados funcionan perfectamente en 2008R2 pero no funcionan en 2014.
Ejemplo para otorgar permiso en SQL Server 2014
Si desea otorgar al usuario Alice los permisos SELECCIONAR, INSERTAR, ACTUALIZAR y ELIMINAR a todos los objetos con valores de tabla en el esquema de Ventas, utilice lo siguiente.
OTORGAR SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR EL ESQUEMA :: Ventas A Alice; Si desea otorgarle a la directora Alice los permisos SELECT, INSERT, UPDATE y DELETE a todos los objetos con valores de tabla en todos los esquemas, utilice lo siguiente.
OTORGAR SELECCIONAR, INSERTAR, ACTUALIZAR, BORRAR A Alice; La visibilidad de los metadatos funcionará correctamente.
fuente