2009-03-10 3 views
0

je le T-SQL suivante pour afficher toutes les autorisations accordées aux directeurs d'école sur mon serveur SQL 2005:Comment Révoquer l'autorisation SELECT pour system_views au public

select dp.NAME AS principal_name, --1 
    dp.type_desc AS principal_type_desc, --2 
    o.NAME AS object_name, --3 
    p.permission_name, --4 
    p.state_desc AS permission_state_desc --5 
from sys.database_permissions p 
    left OUTER JOIN sys.all_objects o 
    on  p.major_id = o.OBJECT_ID 
    inner JOIN sys.database_principals dp 
    on  p.grantee_principal_id = dp.principal_id 
order by principal_name, object_name 

Le résultat affiche public SELECT accordée:

1  2    3   4  5 
... 
public DATABASE_ROLE system_views SELECT GRANT 
.... 

Je pense que object_name system_views est pour toutes les vues dans mon dossier Views | system_views de la base de données. J'ai essayé le T-SQL (juste pour voir si cela fonctionne GRANT à nouveau) suivant:

GRANT SELECT ON system_views TO public 

Je suis erreur « Impossible de trouver l'objet « system_views », parce qu'il n'existe pas ou que vous n'êtes pas autorisé ". Je connecte le serveur SQL en tant que sa.

Ma question est de savoir comment révoquer l'autorisation SELECT sur system_views pour public (utilisateur ou principal?) Et de rejeter l'autorisation si nécessaire. La deuxième question est si la révocation sur system_views pour public a un effet secondaire pour les autres utilisateurs?

Répondre

1

Il n'y a aucune raison de révoquer les droits pour afficher les vues du système. Les utilisateurs ne peuvent voir que les objets auxquels ils ont déjà accès, donc ils savent déjà que ces objets existent.

Si vous souhaitez accorder à un utilisateur le droit de voir tous les objets dans la base de données, accordez-leur la définition de vue sur le schéma ou la base de données.

0

select * from sys.system_views

Est-publique ont vue définition sur l'un de ces?

Je recommanderais fortement de ne pas déraper avec tout ça.

Vous pourriez juste

DENY VIEW DEFINITION ON SCHEMA::DBO TO PUBLIC 
publique
0

est un rôle "special". Ne plaisante pas avec ça. Chaque utilisateur est membre du public par défaut, par exemple.

Metadata visibility détermine réellement ce qu'un utilisateur voit. Donc, même si quelqu'un fait SELECT * FROM sys.columns, ils ne verront que les colonnes pour les objets sur lesquels ils ont des droits. Aucun autre droit = ​​seulement des informations sur les colonnes pour les vues système.

Vous êtes susceptible de casser des choses si vous faites cela, surtout dans SSMS ou des clients d'accès direct (Access, Excel, etc.)

Questions connexes