Bonjour,
voici un code qui permet de lister les permissions sur tous les objets d'une base, et si nécessaire tous les colonnes de chacune des tables.
Il te suffira d'ajouter une clause WHERE si tu veux filtrer le résultat par nom d'utilisateur ou nom d'objet
A+
PS : fait attention à la différnce entre le LOGIN et l'UTILISATEUR dans la base. Par exemple le login c'est 'sa', mais l'utilisateur c'est 'dbo'. Donc si nécessaire ajoute à mon code une jointure avec syslogins de master et prefixe les tables par la base de données dans laquelle tu recherches les droits sur les objets.
PSBIS : si tu veux faire un filtre sur le nom d'une table ou d'un utilisateur compare les chaines de caractères en forcant en majuscule systématiquement. Ca evite les histoires de noms avec majuscules, minuscules
WHERE UPPER(su.name) = 'DUPOND'
Le code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
SELECT
so.name,
so.type,
su.name,
CASE ISNULL(pro.action, 0)
when 26 then 'REFERENCES'
when 178 then 'CREATE FUNCTION'
when 193 then ' SELECT'
when 195 then ' INSERT'
when 196 then ' DELETE'
when 197 then 'UPDATE'
when 198 then 'CREATE TABLE'
when 203 then 'CREATE DATABASE'
when 207 then 'CREATE VIEW'
when 222 then 'CREATE PROCEDURE'
when 224 then 'EXECUTE'
when 228 then 'BACKUP DATABASE'
when 233 then 'CREATE DEFAULT'
when 235 then 'BACKUP LOG'
when 236 then 'CREATE RULE'
when 0 then 'TOUS'
END 'DROIT',
case isnull(pro.COLUMNS, 5)
when 1 then co.name
when 0 then 'ALL'
when 5 then 'OBJET ENTIER'
END 'COLONNE'
FROM sysobjects so
INNER JOIN sysusers su
ON so.uid = su.uid
LEFT JOIN sysprotects pro
ON pro.id = so.id
LEFT JOIN syscolumns co
ON pro.COLUMNS = co.colID
AND pro.id = co.id
ORDER BY so.name, su.name |
Partager