web-dev-qa-db-fra.com

SQL Server: pouvez-vous limiter l'accès à une seule table

Je pense que la réponse est non, mais je cherche à donner à quelqu'un accès à un SQL Server base de données mais je veux seulement qu'ils aient accès à une seule table.

Il est assez facile de limiter quelqu'un pour accéder à une seule base de données, mais je ne sais pas si je peux me limiter à une seule table.

Mes pensées étaient de créer une autre base de données avec un synonyme de l'autre table, puis de limiter l'accès à cette base de données, mais je me demandais si quelqu'un pouvait penser à une meilleure façon.

Je ne suis pas non plus convaincu que cela fonctionnera car je pense qu'il y aura un conflit d'autorisations.

18
Andrew Newland

Oui.

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

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

Bien que cela fonctionne, vous feriez probablement mieux de gérer les autorisations en utilisant rôles et les groupes AD.

29
Mitch Wheat

Le problème avec la boucle à travers toutes les tables et le refus d'accès serait si vous ajoutez une nouvelle table.

L'important est de ne pas donner à l'utilisateur 'db_datareader' accès à toute la base de données. En utilisant l'interface utilisateur, vous pouvez utiliser l'onglet User Mapping sous la connexion, vous pouvez créer l'utilisateur avec un accès "public" uniquement. Ensuite, vous pouvez accéder à la base de données et accorder à cet utilisateur un accès SELECT à la table particulière (en cliquant sur le bouton "Rechercher" bizarrement sous l'onglet Securables).

Bien entendu, cette approche fonctionnerait également avec le script.

8
mike nelson
GRANT SELECT ON [SchemaName].[TableName] to [UserName]
3
kd7

Certainement. ACCORDEZ les autorisations que vous souhaitez.

Lorsque vous accordez à un utilisateur l'accès à une base de données, examinez les rôles qui leur sont attribués et les droits dont ces rôles disposent.

Le problème est que les gens accordent généralement des autorisations trop larges au début.

2
Cade Roux

Sûr que vous pouvez. Après avoir créé l'utilisateur et lui avoir donné accès à la base de données, accordez uniquement un accès sélectif (ou le niveau dont il a besoin) à cette table.

0
Brian