Je recherche le meilleur moyen de désactiver l'accès au sys.tables
/ Information Schema
pour un utilisateur / groupe dans SQL Server.
J'ai trouvé ce fil de 2008
Il montre comment refuser l'accès [sys].[something]
comme ceci:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Mais aucun moyen de désactiver l'accès sur Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Cela ne semble pas fonctionner.
Comment puis-je désactiver l'accès à information_schema?
Et existe-t-il un moyen plus simple de désactiver l'accès à tous sys
/ information_schema
?
Mise à jour: En fait, je ne peux pas exécuter les deux déclarations suivantes:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
J'ai essayé de les exécuter sur la base de données spécifique où l'utilisateur existe, et j'ai également essayé sur le "maître".
Je peux toujours courir:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> renvoie toujours les résultats
SELECT * from
sys.TABLES
-> plus de résultats
L'inclusion SCHEMA::
dans la requête a permis de créer les sécurisables
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Mais maintenant, je peux toujours sélectionner toutes les informations de la base de données.
J'ai jeté un œil à l'onglet "Securables" dans la fenêtre de propriétés des utilisateurs dans Management Studio 2008, il ressemble à ceci:
Entrée qui bloque la sélection de sys.tables
Schéma: sys, Nom: tables, Type: Affichage
Autorisations pour sys.tables: Autorisation: sélectionner, concédant: dbo, refuser est coché
Entrée qui ne bloque aucune sélection
Schéma:, Nom: INFORMATION_SCHEMA, Type: Schéma
Autorisations pour INFORMATION_SCHEMA: Autorisation: sélectionner, concédant: dbo, le refus n'est PAS vérifié (j'ai essayé de le vérifier, mais aucune chance ..)
Autorisation: Sélectionnez, Grantor: INFORMATION_SCHEMA, Refuser est vérifié
J'ai essayé de définir les autorisations sur l'interface graphique, mais je reçois la même erreur que la définition des autorisations ne serait possible que sur la base de données principale. Mais je n'ai pas l'utilisateur / login ajouté à la sécurité des DB maîtres.
Solution:
La seule façon dont je pouvais faire le deny
travail pour le information_schema
était d' ajouter l'utilisateur au master-db et d'exécuter le deny select
sur le master:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
Et comme dans ce code, il ne peut être exécuté que pour des tables uniques.