Pull to refresh

Введение в IBM DB2

Reading time4 min
Views42K
По работе пришлось в течение некоторого времени разбираться с СУБД IBM DB2. Т.к. система коммерческая, то в интернете не так много информации на русском языке, поэтому решил описать некоторые особенности работы этой СУБД.



Точка входа



Начнем со входной точки в СУБД. В SQL SERVER конечной точкой является экземпляр (instance), в котором конечно могут быть отдельные базы данных, но конфигурация и модель безопасности единая для всего экземпляра. В DB2 же точка входа выглядит так — экземпляр (который соответствует конкретному порту) — база данных. При этом конфигурация есть и для целиком экземпляра, и для отдельной базы данных.

Посмотреть конфигурацию экземпляра можно либо с помощью db2-команды:

get database manager configuration

Database Manager Configuration

Node type = Enterprise Server Edition with local and remote clients

Database manager configuration release level = 0x0b00

CPU speed (millisec/instruction) (CPUSPEED) = 2.912790e-07
Communications bandwidth (MB/sec) (COMM_BANDWIDTH) = 1.000000e+02

Max number of concurrently active databases (NUMDB) = 8
Federated Database System Support (FEDERATED) = YES
Transaction processor monitor name (TP_MON_NAME) =

Default charge-back account (DFT_ACCOUNT_STR) =

Java Development Kit installation path (JDK_PATH) = /home/db2inst1/sqllib/java/jdk32

Diagnostic error capture level (DIAGLEVEL) = 3
Notify Level (NOTIFYLEVEL) = 3
Diagnostic data directory path (DIAGPATH) = /home/db2inst1/sqllib/db2dump

Default database monitor switches
Buffer pool (DFT_MON_BUFPOOL) = OFF


Где будут указаны параметры, их значение и расшифровка. Возможен также сокращенный вариант:

get dbm cfg

Либо с помощью запроса:

select name, value from sysibmadm.dbmcfg

Из важных параметров можно отметить:
  • тип аутентификации (AUTHENTICATION)
  • путь по умолчанию для создания новых БД (DFTDBPATH)
  • обнаружение сервера по сети (DISCOVER)

Посмотреть настройки конкретной базы можно так:

connect to sample (sample - имя бд)

get database manager configuration


Либо примерно таким же запросом, как и ранее:

select name, value from sysibmadm.dbcfg

Аутентификация



Большим отличием DB2 от других СУБД является модель аутентификации. Здесь нет внутренних пользователей, как в SQL Server или MySQL. Вся аутентификация производится внешними по отношению к СУБД средствами (динамически подгружаемыми плагинами) — средствами операционной системы либо внешними плагинами (Kerberos,GSS API). Тип аутентификации задается в параметре AUTHENTICATION конфигурации менеджера БД. По умолчанию выставлено значение SERVER — имя пользователя и пароль передается в открытом виде и данная пара проверяется на правильность средствами операционной системы. Если имя пользователя и пароль верны, то проверяется наличие привилегии CONNECT у пользователя или групп, в которые он входит (в т.ч. специальная группа PUBLIC, куда входят все авторизованные пользователи). Данные привилегии можно посмотреть в таблице SYSCAT.DBAUTH:

select GRANTEE from SYSCAT.DBAUTH where CONNECTAUTH = 'Y'

Большой ошибкой при настройке является включение типа аутентификации CLIENT. В этом случае DB2 доверяет проведение аутентификации подключаемому клиенту и если у PUBLIC есть привилегия CONNECT, то любой пользователь сможет подключиться к БД и получит доступ ко всем данным, которые есть у PUBLIC. Имя пользователя при этом берется из операционной системы. То есть если мы подключаемся через Data Studio пользователем Administrator, то будут предоставлены все привилегии, которые есть у данного пользователя. И в этом случае нет разницы, с какого компьютера был произведен доступ. Данный тип аутентификации рекомендуется включать только тогда, когда есть защищенный канал между сервером и клиентом, и другие клиенты не смогут подключиться к СУБД.

Авторизация



Привилегии уровня конкретного экземпляра прописываются в конфигурации менеджера БД. Это следующие привилегии:
  • SYSADM
  • SYSCTRL
  • SYSMAINT
  • SYSMON

Задаются данные привилегии с помощью указания группы, куда будет входить пользователь. В dbmcfg это соответственно параметры SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP и SYSMON_GROUP.

Далее есть привилегии конкретной базы данных. Это такие привилегии, как доступ к базе данных (CONNECTAUTH), создание таблиц (CREATETABAUTH), создание подпрограмм (EXTERNALROUTINEAUTH) и тд. Данные привилегии можно просмотреть в представлении SYSCAT.DBAUTH

И наконец привилегии доступа к конкретным данным — таблицам, подпрограммам и тд. Здесь все довольно тривиально, но тоже с некоторыми особенностями.

Привилегии доступа к таблицам можно просмотреть в представлении SYSCAT.TABAUTH. Тип выданной привилегии хранится в отдельных колонках, в зависимости от самой привилегии (SELECTAUTH,DELETEAUTH и тд). При выдачи привилегии с помощью команды GRANT для привилегий REFERENCES и UPDATE можно также указать имена колонок, на которые будут распространяться данные привилегии. В этом случае информацию об этом можно посмотреть в представлении SYSCAT.COLAUTH

Привилегии подпрограмм (функций, процедур и методов) можно посмотреть в SYSCAT.ROUTINEAUTH. Здесь не совсем все тривиально, в зависимости от полей SPECIFICNAME и TYPENAME привилегии могут быть выданы на все подпрограммы заданной схемы.

Если читателям понравится статья, то готов рассказать по поводу защиты данных в DB2 с помощью Label-Based Access Control
Tags:
Hubs:
Total votes 39: ↑32 and ↓7+25
Comments6

Articles