Devo limitare l'accesso a un determinato utente, ma devono comunque essere in grado di vedere i dati nelle tabelle di proprietà di dbo.
Sto provando a fare quanto segue:
- lo schema dbo funziona come normalmente, ha accesso a tutto
- schema1 schema ha accesso solo agli oggetti schema1
- se una vista schema1 o una procedura memorizzata accede ai dati nelle tabelle di proprietà di dbo, la catena di autorizzazioni in modo appropriato
- user1 ha accesso a schema1 e nient'altro; tranne nel caso del n. 3
Ecco cosa ho provato:
- Creare un utente user1 associato a un login di prova con una password casuale
- Creato un paio di tabelle nello schema dbo con alcuni dati di test al loro interno
- Creato uno schema1
- Creato uno schema1.get_profiles che seleziona da una vista chiamata schema1.profiles che accede ai dati in dbo.people, dbo.taglinks e dbo.tags
Tuttavia, utilizzando la seguente istruzione durante l'accesso come utente1:
EXEC get_profiles 1
risulta in:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Ho provato WITH EXECUTE AS OWNER
e non riesco a capire come dovrebbe funzionare il "concatenamento della proprietà".
Ho anche provato
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
ma viene visualizzato il seguente errore (nonostante sia un utente con accesso a livello di doppio):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Ciò di cui ho bisogno è user1 per poter accedere ai dati tramite le procedure memorizzate che do loro, e nient'altro.
Inoltre, questo è destinato a vivere su un database SQL Azure esistente, ma sto testando prima un database fittizio locale.