Uprawnienia w bazie danych DB2

Baza danych DB2 tym się różni od innych baz (Oracle, MySQL) że nie posiada ona użytkowników bazodanowych, a jedynie użytkowników dodanych w systemie operacyjnym którym w bazie przyznawane są odpowiednie uprawnienia.

Tak więc aby utworzyć nowego użytkownika logujemy się do systemu na konto ROOT i zakładamy użytkownika.

Dodajemy usera UserDB2

[root@vdb2bck ~]# useradd userdb2

Ustawiamy mu hasło

[root@vdb2bck ~]# passwd userdb2

Changing password for user userdb2.
New password:
Retype new password:
passwd: all authentication tokens updated successfully. 

Możemy spróbować się zalogować na tego usera do systemu i uruchomić DB2.

db2_uprawnienia_1

Jak widać do bazy dostać się na razie nie możemy, bo nie mamy ustawionych zmiennych środowiskowych dla naszej instancji (db2inst1).

[user2db2@vdb2bck ~]$ cd /db2/db2home/db2inst4/sqllib
[db2inst2@vdb2bck ~]$ . $HOME/sqllib/db2profile

gdzie $HOME to katalog domowy db2inst1

[user2db2@vdb2bck sqllib]$ . db2profile

Sprawdzamy zmienne

[db2inst2@vdb2bck ~]$ env | grep DB2

DB2INSTANCE=db2inst2
DB2_HOME=/db2/db2home/db2inst2/sqllib
DB2LIB=/db2/db2home/db2inst2/sqllib/lib 

db2_uprawnienia_2

I już db2 nam działa. Ale jeszcze nie mamy żadnych uprawnień w DB2.
Wykonując polecenie:

[userdb2@vdb2bck]$ db2 "select * from db2inst4.personel"

SQL0551N  "USERDB2" does not have the required authorization or privilege to
perform operation "SELECT" on object "DB2INST4.PERSONEL".  SQLSTATE=42501 

Zwraca nam błąd o braku uprawnień do wykonania powyższej operacji.

Należy je dodać z użytkownika bazodanowego db2inst1:
[db2inst4@vdb2bck ~]$ db2 „GRANT SELECT ON TABLE db2inst4.personel TO USER userdb2”

DB20000I  The SQL command completed successfully. 

Ponowne wykonanie zapytania z usera userdb2 wykonuje się poprawnie:

[userdb2@vdb2bck ~]$ db2 „select * from db2inst4.personel”

NAMEID IMIE       NAZWISKO             WIEK
------ ---------- -------------------- ----
1      Adam       Mickiewicz           48
2      Rafal      Wabinski             33
3      Monika     Gradowska            18
4      Marcin     Wojcik               35

  4 record(s) selected. 

Aby sprawdzić jakie ma uprawnienia należy wykonać polecenie:

[db2inst4@vdb2bck ~]$ db2 attach to db2inst1 user userdb2 using Haslo123

   Instance Attachment Information

 Instance server        = DB2/LINUXX8664 9.7.6
 Authorization ID       = USERDB2
 Local instance alias   = DB2INST1 

Możemy to wykonać z naszego nowego usera.
Jeśli chcemy dodać uprawnienia do grupy obiektów zgrupowanej w schemacie (przykładowo TEMPSCHEMA) należy wykonać polecenie:

db2 grant select on schema TEMPSCHEMA to userdb2

A teraz coś bardziej skomplikowanegogo :). Jeśli mamy dodać uprawnienia do odczytu (SELECT) dla użytkownika userdb2 do obiektów innego użytkownika userdb1 możemy skorzystać z polecenia:

select distinct 'GRANT SELECT ON TABLE '||''||rtrim(tabschema)||'.'||rtrim(tabname)||' TO USER db2admin' from syscat.tables where TABSCHEMA = 'USRDB1'

Spowoduje to wygenerowanie poleceń do wszystkich obiektów usera USRDB1:

GRANT SELECT ON TABLE USRDB1.ACCT_CHANGE TO USER usrdb2; 
GRANT SELECT ON TABLE USRDB1.ACI TO USER usrdb2;
GRANT SELECT ON TABLE USRDB1.ACI_PERMISSION_ATTRIBUTERIGHT TO USER usrdb2; 
GRANT SELECT ON TABLE USRDB1.ACI_PERMISSION_CLASSRIGHT TO USER usrdb2;
GRANT SELECT ON TABLE USRDB1.ACI_PRINCIPALS TO USER usrdb2; 
GRANT SELECT ON TABLE USRDB1.ACI_ROLEDNS TO USER usrdb2; 

jeżeli wynik tego zapytania zapiszemy do pliku np grant_select.sql mozemy go potem uruchomić poleceniem:

db2 -tvf grant_select.sql

Jeśli byśmy chcieli wyświetlić listę schematów w naszej bazie wykonujemy:

db2 "SELECT UNIQUE SUBSTR(OBJECTSCHEMA,1,20) as OBJECT_SCHEMA FROM SYSIBMADM.PRIVILEGES"

OBJECT_SCHEMA
--------------------

ADMINISTRATOR
CVDBIN
DB2ADMIN
DB2INST1
NROLEX
...
SYSIBMINTERNAL
SYSPROC
SYSPUBLIC
SYSSTAT
SYSTOOLS

  31 record(s) selected.

Wyświetlenie uprawnień dla usera (w przykładzie to ROLLEX) w obiektach w całej bazie :

db2 "select SUBSTR(GRANTOR,1,20) AS GRATOR, GRANTORTYPE, SUBSTR(GRANTEE,1,10) AS GRANTEE, GRANTEETYPE, SUBSTR(TABSCHEMA,1,20) AS TABSCHEMA, SUBSTR(TABNAME,1,20) AS TABNAME, CONTROLAUTH, ALTERAUTH, DELETEAUTH, INDEXAUTH, INSERTAUTH, REFAUTH, SELECTAUTH, UPDATEAUTH from syscat.tabauth where grantee='ROLLEX'"

GRATOR               GRANTORTYPE GRANTEE    GRANTEETYPE TABSCHEMA            TABNAME              CONTROLAUTH ALTERAUTH DELETEAUTH INDEXAUTH INSERTAUTH REFAUTH SELECTAUTH UPDATEAUTH
-------------------- ----------- ---------- ----------- -------------------- -------------------- ----------- --------- ---------- --------- ---------- ------- ---------- ----------
...
SYSIBM               S           ROLLEX     U           ROLLEX               SMPACCOUNT           N           N         Y          N         Y          N       Y          Y
SYSIBM               S           ROLLEX     U           ROLLEX               CLASSRIGHT_SMPACCOUN N           N         Y          N         Y          N       Y          Y
SYSIBM               S           ROLLEX     U           ROLLEX               ATTRSRIGHT_SMPACCOUN N           N         Y          N         Y          N       Y          Y
SYSIBM               S           ROLLEX     U           ROLLEX               SMPACCOUNT_OWNER     N           N         Y          N         Y          N       Y          Y
SYSIBM               S           ROLLEX     U           ROLLEX               DEFAULTROLE          N           N         Y          N         Y          N       Y          Y
SYSIBM               S           ROLLEX     U           ROLLEX               CLASSRIGHT_DEFAULTRO N           N         Y          N         Y          N       Y          Y

  323 record(s) selected.

Najważniejsze kolumny określające uprawnienia do obiektów to ALTERAUTH, DELETEAUTH, INSERTAUTH, SELECTAUTH, UPDATEAUTH które określają odpowiednie uprawnienia ALTER, DELETE, INSERT, SELECT, UPDATE (jeśli jest Y – yes)

Wydając polecenie

SET SCHEMA = DB2INST1;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE CVDB.APPID TO USER ROLLEX;

ustawiamy GRANTOR’a czyli schemat nadający uprawnienia oraz przyznając odpowiednie uprawnienia.

db2 "select SUBSTR(GRANTOR,1,20) AS GRATOR, GRANTORTYPE, SUBSTR(GRANTEE,1,15) AS GRANTEE, GRANTEETYPE, SUBSTR(TABSCHEMA,1,20) AS TABSCHEMA, SUBSTR(TABNAME,1,30) AS TABNAME, CONTROLAUTH, ALTERAUTH, DELETEAUTH, INDEXAUTH, INSERTAUTH, REFAUTH, SELECTAUTH, UPDATEAUTH from syscat.tabauth where grantee='RIM_EAM_DB1'"

GRATOR               GRANTORTYPE GRANTEE         GRANTEETYPE TABSCHEMA            TABNAME                        CONTROLAUTH ALTERAUTH DELETEAUTH INDEXAUTH INSERTAUTH REFAUTH SELECTAUTH UPDATEAUTH
-------------------- ----------- --------------- ----------- -------------------- ------------------------------ ----------- --------- ---------- --------- ---------- ------- ---------- ----------
DB2INST1             U           RIM_EAM_DB1     U           CVDB                 APPID                          N           N         Y          N         Y          N       Y          Y

  1 record(s) selected.

Specjalne uprawnienia nadaje się poleceniem

[db2inst4@vdb2bck ~]$ db2 GRANT DBADM, CREATETAB, BINDADD, CONNECT, CREATE_NOT_FENCED_ROUTINE, IMPLICIT_SCHEMA, LOAD, CREATE_EXTERNAL_ROUTINE, QUIESCE_CONNECT, SECADM ON DATABASE TO USER userdb2;
DB20000I The SQL command completed successfully.

[db2inst4@vdb2bck ~]$ db2 connect reset

DB20000I  The SQL command completed successfully. 

Ich znaczenie omówię później

Ten wpis został opublikowany w kategorii DB2 i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz