Gli utenti non possono visualizzare le tabelle nello schema non predefinito in SSMS


10

Ho un problema a impostare l' VIEW DEFINITIONautorizzazione in modo appropriato a livello di schema per uno dei miei utenti. Ho creato lo schema TestSchemae aggiunto alcune tabelle. L'utente dispone attualmente autorizzazioni impostate per l'accesso e modificare la tabella ( SELECT, UPDATE, DELETE, ecc) attraverso le dbo_datareadere dbo_datawriterruoli. Tuttavia, non possono vedere nessuna delle tabelle in Esplora oggetti SSMS.

Ho provato a concedere le autorizzazioni per visualizzare le definizioni:

grant view definition on SCHEMA :: [TestSchema] to [User]

Non ha funzionato. Ho provato a impostare l'autorizzazione a livello di tabella:

grant view definition on [TestSchema].[NewTable] to [User]

Anche quello non ha funzionato. Quindi ho provato solo una borsa di studio:

grant view definition to [User]

E quello ha funzionato; ora possono vedere TestSchema, così come altri schemi a cui non dovrebbero avere accesso.

Il mio obiettivo qui è consentire all'utente di visualizzare tutte le tabelle all'interno di un determinato schema. Come posso farlo? Se io dovrei essere in grado di fare questo per default, quali permessi dovrei essere a guardare per trovare perché non posso?


Nella mia istanza 2008R2 quando concedo db_datareader o db_datawriter possono vedere tutti gli schemi. Mi rendo conto che non è quello che stai cercando, ma significa che c'è una differenza significativa tra la tua configurazione e la mia, quindi non posso davvero provarla. La versione è diversa o è stata modificata qualche altra sicurezza?
cfradenburg,

@cfradenburg - È difficile dirlo; questo è un server gestito dall'IT, quindi non sono sicuro di ciò che hanno fatto e sono un principiante di SQL Server, quindi non so cosa cercare. Immagino che parte della mia domanda sia: quali altri permessi / ruoli / ??? dovrei cercare per determinare se questo può essere semplicemente risolto dalle autorizzazioni?
eykanal,

L'utente può interrogare le tabelle? Se possono eseguire una query, potrebbe trattarsi solo di un problema all'interno di SSMS.
user9164,

@ user9164 Sì, gli utenti possono interrogare le tabelle; è solo un problema di visualizzarli all'interno di SSMS.
eykanal,

Risposte:


11

Risposta breve: non utilizzare db_datareadero db_datawriternegare gli equivalenti. Sono solo per compatibilità con le versioni precedenti. Usarli causerà problemi come quello che stai affrontando.

Se si desidera assegnare ad Alice principale le autorizzazioni SELECT, INSERT, UPDATE e DELETE per tutti gli oggetti con valori di tabella nello schema Vendite, utilizzare quanto segue.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Se si desidera assegnare ad Alice principale le autorizzazioni SELECT, INSERT, UPDATE e DELETE per tutti gli oggetti con valori di tabella in tutti gli schemi, utilizzare quanto segue.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

La visibilità dei metadati funzionerà quindi correttamente.


Hai una fonte per il bit di "compatibilità con le versioni precedenti"? Capisco che gli schemi sono deprecati, ma non riesco a trovare nulla sui ruoli.
Stijn

0

Dai un'occhiata ai principali altri permessi che potrebbero esserci un rifiuto da qualche parte che sta causando il problema. Ricorda che un rifiuto si applicherà sempre sopra una sovvenzione. E poiché non è il tuo server, potrebbe esserci qualcosa nell'account che il reparto IT ha impostato.

Usa qualcosa del genere a livello di server:

    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

E qualcosa del genere a livello di database

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

Grazie per il commento, lo proverò quando tornerò al lavoro lunedì.
eykanal,

0

Questo mi è successo quando ho aggiornato il nostro SQL Server dal 2008R2 al 2014. db_datareader o db_datawriter o i loro equivalenti di negazione funzionano perfettamente nel 2008R2 ma non funzionano nel 2014.

Esempio di concessione dell'autorizzazione in SQL Server 2014

Se si desidera fornire all'utente Alice le autorizzazioni SELECT, INSERT, UPDATE e DELETE per tutti gli oggetti a valori di tabella nello schema Vendite, utilizzare quanto segue.

SELEZIONA, INSERISCI, AGGIORNA, ELIMINA SU SCHEMA :: Vendite ad Alice; Se si desidera assegnare ad Alice principale le autorizzazioni SELECT, INSERT, UPDATE e DELETE per tutti gli oggetti con valori di tabella in tutti gli schemi, utilizzare quanto segue.

SELEZIONA, INSERISCI, AGGIORNA, ELIMINA A Alice; La visibilità dei metadati funzionerà quindi correttamente.

Riferimento [Greenstone Walker].


1
Sundeep, prova a spiegare una risposta invece di fornire semplicemente un link. Se hai bisogno di aiuto, dai un'occhiata al tour
LowlyDBA,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.