Bonjour je cherche à donner à un utilisateur le droit de modifier et voir qu'UNE seule table sur UNE base.
Je suis soit trop restrictif soit trop permissif.
Pouvez vous m'aidez ?
Merci
Bonjour je cherche à donner à un utilisateur le droit de modifier et voir qu'UNE seule table sur UNE base.
Je suis soit trop restrictif soit trop permissif.
Pouvez vous m'aidez ?
Merci
Bonjour,
Il faut que votre utilisateur puisse se connecter à l'instance, puis "effectuer une prise de contexte" (entrer...) dans la base, puis manipuler l'objet choisi.
Donc, concrètement, il faut:
Créer un login
Créer un user dans la base MA_BASE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 use master; GO CREATE LOGIN toto password 'titi' default_database MA_BASE; GO
puis enfin donner les droits qui vont bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 use MA_BASE; GO CREATE user toto for login toto; GO
Attention aux permissions de type DENY (notamment celles des rôles db_deny_datareader et db_deny_datawriter) qui empêcheraient la manipulation de l'objet même si une permission GRANT est octroyée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 use MA_BASE; GO GRANT SELECT, INSERT, UPDATE, SELECT, DELETE ON MA_TABLE to toto; GO
Cordialement.
Benjamin
Merci pour votre réponse.
En sql server 2008R2 la syntaxe de création de la connexion est plutôt celle ci.
Pour ce qui est de l’accès à d'autre base : c'est ok. 'titi' n'y a pas accs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 USE master; GO CREATE LOGIN titi WITH password ='titi', default_database = MA_BASE; GO
Par contre sur MA_BASE, 'titi' à accès en modification à toutes les autres tables de ma base or moi j'aurais souhaité qu'il ne les voit pas non plus.
Est ce que c'est possible simplement ?
Merci
Bonjour,
Si l'utilisateur de la base dispose de droits sur des objets alors que vous ne lui avez pas donné spécifiquement ces droits, c'est que l'un des trois cas ce-dessous se présente:
- Soit l'utilisateur est membre d'un des rôles prédéfinis (db_datareader par exemple)
- Soit le login associé à l'utilisateur est membre du rôle serveur sysadmin
- Soit des droits sur des objets de la base sont donnés au rôle "public", auquel appartiennent tous les utilisateurs de la base. Puisqu'il n'est pas possible de supprimer l'appartenance d'un utilisateur au rôle public, la solution consisterait donc à donner les privilèges DENY sur tous les objets de la base sauf pour la table choisie.
Pour vérifier si le rôle public dispose de privilèges:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select O.name, P.permission_name, P.state_desc from sys.database_permissions P inner join sys.database_principals U on U.principal_id = P.grantee_principal_id inner join sys.objects O ON O.object_id = P.major_id where U.name='public'
Effectivement, il y a un certain nombre d'objet qui remonte avec cette requête.
Merci pour ces explications.
Cordialement,
Partager