Necesito limitar el acceso a un usuario en particular, pero aún necesitan poder ver los datos en tablas propiedad de dbo.
Estoy tratando de hacer lo siguiente:
- El esquema dbo funciona como lo haría normalmente, tiene acceso a todo
- schema1 schema tiene acceso solo a objetos schema1
- Si una vista de esquema1 o un procedimiento almacenado accede a los datos en tablas propiedad de dbo, la cadena de permisos de manera adecuada
- el usuario1 tiene acceso al esquema1, y nada más; excepto en el caso del n. ° 3
Esto es lo que he intentado:
- Crear un usuario1 usuario asignado a un inicio de sesión de prueba con una contraseña aleatoria
- Creé un par de tablas en el esquema dbo con algunos datos de prueba en ellas
- Creó un esquema de esquema1
- Creó un schema1.get_profiles que selecciona desde una vista llamada schema1.profiles que accede a datos en dbo.people, dbo.taglinks y dbo.tags
Sin embargo, utilizando la siguiente instrucción mientras está conectado como usuario1:
EXEC get_profiles 1
resultados en:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
He intentado WITH EXECUTE AS OWNER
y no puedo comenzar a entender cómo se supone que funciona el "encadenamiento de propiedad".
También he intentado
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
pero recibo el siguiente error (a pesar de ser un usuario con acceso de nivel dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Lo que necesito es user1 para poder acceder a los datos a través de los procedimientos almacenados que le doy, y nada más.
Además, esto está destinado a vivir eventualmente en una base de datos SQL Azure existente, pero primero estoy probando contra una base de datos ficticia local.