2012-03-20 28 views
14

Penso che la risposta sia no, ma sto cercando di fornire a qualcuno l'accesso a un database di SQL Server ma voglio solo che abbiano accesso a una tabella.SQL Server: puoi limitare l'accesso a una sola tabella

È abbastanza facile limitare l'accesso a un solo database, ma non ho idea se posso limitare a una sola tabella.

I miei pensieri erano di creare un altro database con un sinonimo per l'altra tabella e quindi limitare l'accesso a quel database, ma mi chiedevo se qualcuno potesse pensare a un modo migliore.

Non sono nemmeno convinto che funzionerà come credo ci sarà un conflitto di autorizzazioni.

Grazie

+7

È possibile dare alle persone l'accesso a una singola * colonna * se si sceglie, creare il proprio accesso e concedere l'autorizzazione di selezione sulla tabella –

risposta

20

Sì.

exec sp_msforeachtable "DENY SELECT ON '?' TO [username];" 
GO 

GRANT SELECT ON [schemaName].[tableName] to [username] 
Go 

Mentre funziona, si sarebbe probabilmente essere meglio gestire autorizzazioni utilizzando roles e gruppi di annunci.

+0

Impressionante, grazie. Darò questo andare. –

3
GRANT SELECT ON [SchemaName].[TableName] to [UserName] 
+1

Come protegge il resto delle tabelle? –

+0

Non funziona, ecco perché la risposta non è stata contrassegnata come accettata, mentre quella accettata. Non sono sicuro se mi stai chiedendo questo per sottolineare che ho sbagliato per qualche strano motivo mesi dopo questa risposta che avevo dimenticato da tempo, in entrambi i modi, spero che il mio commento aiuti. – kd7

+2

Spiacente che questa domanda è stata portata alla mia attenzione in chat.Quando ho commentato, in realtà non mi ero reso conto di quanti anni avesse la domanda. Tuttavia, penso che sia valido mettere in discussione aspetti delle risposte rispetto alla domanda originale, indipendentemente dal suo stato di accettazione o dal conteggio dei voti. Un sacco di domande non hanno una risposta accettata, e questa domanda è ancora qui perché le risposte sono pensate per aiutare i lettori OP * e * futuri. Molti dei quali possono presumere che qualsiasi risposta sulla pagina è una risposta. –

0

Certo che puoi. Dopo aver creato l'utente e aver dato loro l'accesso al database, concedere solo l'accesso selezionato (o qualsiasi altro livello necessario) a quella tabella.

2

Certamente. GRANT le autorizzazioni che si desidera.

Quando si concede a un utente l'accesso a un database, esaminare i ruoli assegnati e i diritti di tali ruoli.

Il problema è che le persone generalmente concedono permessi troppo ampi all'inizio.

5

Il problema con il looping di tutte le tabelle e la negazione dell'accesso sarebbe se si aggiungesse una nuova tabella.

L'importante è non concedere all'utente 'db_datareader' l'accesso all'intero database. Utilizzando l'interfaccia utente è possibile utilizzare la scheda Mapping utente sotto il login, è possibile creare l'utente solo con accesso "pubblico". Quindi è possibile accedere al database e concedere a tale utente l'accesso SELECT alla tabella specifica (facendo clic sul pulsante "Cerca" in modo anomalo nella scheda Securables).

Questo approccio funzionerebbe anche con lo script, ovviamente.

-1

Un approccio migliore sarebbe quello di creare un schema separato, creare un schema . Quindi consentire all'utente di EXEC che proc. Questo è tutto. Potresti creare uno view in quello schema e questo potrebbe essere più di ciò che stai cercando.

-1

Il modo migliore è la creazione di una protezione per quella tabella specifica. TI ti chiederà cosa hai intenzione di mettere in sicurezza; tabella, vista, database. Quindi scegli la tabella specifica per proteggere ed escludere quell'utente da quella tabella.

Problemi correlati