2016-11-22 2 views
0

J'accorde le privilège de CREATEIN de schéma pour le schéma « test de » au groupe d'utilisateurs « test groupe », puis ajoutez un utilisateur 'test utilisateur 'dans ce' test-groupe 'sous Windows OS.DB2 comment obtenir des informations de privilège utilisateur lorsque le privilège est accordé à son groupe

Je voudrais savoir quelle fonction DB2 ou une instruction SQL peut être utilisé pour récupérer des informations de privilège pour l'utilisateur « test utilisateur ». Je suis conscient du fait que la relation utilisateur-groupe n'est pas définie dans DB2, mais il doit exister des moyens de rechercher de telles données de relation.

À titre d'exemple, je peux créer une table avec succès dans le schéma « essai » après l'enregistrement dans la base de données par l'utilisateur « test utilisateur » qui signifie que le moteur DB2 peut obtenir « test utilisateur » CREATEIN privilège hérité de 'groupe de test'.

J'ai essayé de vérifier syscat.schemaauth vue par SQL statment select * from syscat.schemaauth mais ne peut pas trouver l'utilisateur 'test utilisateur' définition privilège seul groupe 'test-groupe' définition de privilège:

GRANTOR  GRANTORTYPE GRANTEE GRANTEETYPE SCHEMANAME ALTERINAUTH CREATEAUTH DROPINAUTH 
... .... 
SYSIBM   S   PUBLIC G   ADMINISTRATOR N    Y   N 
ADMINISTRATOR U   TEST  G   TEST   N    Y   Y 
.. ... 

Répondre

2

Vous pouvez utiliser la fonction de la table AUTH_LIST_GROUPS_FOR_AUTHID pour rechercher les groupes pour "test-user". Cela répertorierait TOUS les groupes auxquels appartient l'utilisateur, y compris les groupes de systèmes d'exploitation non utilisés pour la base de données.

SELECT * FROM TABLE (SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('TEST-USER')) AS T 

Il y a une autre vue, SYSIBMADM.AUTHORIZATIONIDS, qui répertorie tous les ID d'autorisation, à savoir, des groupes, des utilisateurs et des rôles:

SELECT * FROM SYSIBMADM.AUTHORIZATIONIDS 

La dernière vue dont vous avez besoin est SYSIBMADM.PRIVILEGES qui énumère les privilèges. En fonction de ce que vous devez vous combiner les trois vues/tables fonctions

  • chercher des groupes pour les groupes connus de la base
  • liste
  • les privilèges pour l'utilisateur et
  • liste les privilèges de l'utilisateur pour tous les groupes auxquels l'utilisateur appartient à

MISE à JOUR:
je me suis intéressé et tapé rapidement et testé une requête. Cela devrait y répondre directement. Le "or a.authid='PUBLIC'" est nécessaire pour inclure les privilèges provenant de PUBLIC.

SELECT distinct p.AUTHID, p.PRIVILEGE, p.OBJECTNAME, p.OBJECTSCHEMA, p.OBJECTTYPE 
FROM SYSIBMADM.PRIVILEGES P, SYSIBMADM.AUTHORIZATIONIDS A, 
    TABLE (SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('userID')) as U 
WHERE p.privilege='CREATEIN' and a.authidtype='G' and a.authid=p.authid 
AND (u.group=a.authid or a.authid='PUBLIC') 
+0

cool, merci Henrik. J'ai eu ce dont j'avais besoin en fonction de votre suggestion. Appréciez votre aide à ce sujet. – Rockets

+0

Oui, Henrik. C'est très bien que votre mise à jour réponde à mon autre question: «comment obtenir le problème public du groupe par défaut». :-) – Rockets

+0

J'ai créé une entrée de blog avec une instruction SELECT supplémentaire. Voir ici http://blog.4loeser.net/2016/11/db2-security-implicit-privileges.html –