Los usuarios no pueden ver tablas en un esquema no predeterminado en SSMS

10

Tengo un problema para configurar el VIEW DEFINITIONpermiso de manera adecuada en el nivel de esquema para uno de mis usuarios. Creé el esquema TestSchemay 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_datareadery dbo_datawriterroles. 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?

eykanal
fuente
En mi instancia 2008R2 cuando concedo db_datareader o db_datawriter, pueden ver todos los esquemas. Me doy cuenta de que eso no es lo que estás buscando, pero significa que hay una diferencia significativa entre tu configuración y la mía, por lo que realmente no puedo probarlo. ¿La versión es diferente o se ha modificado alguna otra seguridad?
cfradenburg
@cfradenburg: es difícil saberlo; este es un servidor administrado por TI, por lo que no estoy seguro de lo que hicieron, y soy un novato en SQL Server, así que no sé qué buscar. Supongo que parte de mi pregunta es, ¿qué otros permisos / roles / ??? ¿Debo buscar para determinar si esto se puede solucionar simplemente con permisos?
eykanal
¿Puede el usuario consultar las tablas? Si pueden consultar, entonces podría ser un problema dentro de SSMS.
usuario9164
@ user9164 Sí, los usuarios pueden consultar las tablas; es solo una cuestión de verlos dentro de SSMS.
eykanal

Respuestas:

11

Respuesta corta: no use db_datareadero db_datawritero 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.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO 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.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

La visibilidad de los metadatos funcionará correctamente.

Caminante de piedra verde
fuente
¿Tiene una fuente para el bit de "compatibilidad con versiones anteriores"? Entiendo que los esquemas están en desuso, pero no puedo encontrar nada sobre los roles.
Stijn
0

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:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

Y algo así a nivel de base de datos

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO
Nick Winstanley
fuente
Gracias por el comentario, lo probaré cuando vuelva a trabajar el lunes.
eykanal
0

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.

Referencia [Greenstone Walker].

Sundeep
fuente
1
Sundeep, intenta explicar una respuesta en lugar de solo proporcionar un enlace. Si necesita ayuda, consulte el recorrido
LowlyDBA