В Sybase ASE, в отличие от MS SQL Server, нельзя напрямую результат exec записать в таблицу и затем считать оттуда нужные данные. Но можно создать так называемую proxy таблицу, которая будет связана с указанной процедурой. И каждый раз при запросе будет вызываться наша процедура. За данную наводку спасибо умному человеку Rob Verschoor:
http://www.sypron.nl/proctab.html
Затем, если вам нужно вывести бинарные данные, которые в базе сохранены примерно как 0x10efbbe, то в MS SQL Server это довольно не тривиально, нужно очень заморачиваться с xml. В противном случае при обычном convert получите на выходе пару иероглифов. В Sybase ASE это решается очень простой функцией bintostr:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36271.1502/html/blocks/CIHHCBAF.htm
пятница, 21 октября 2011 г.
пятница, 7 октября 2011 г.
IBM DB2
По работе пришлось в течение некоторого времени разбираться с СУБД IBM DB2. Т.к. система коммерческая, то в интернете не так много информации на русском языке, поэтому решил описать некоторые особенности работы этой СУБД.
Начнем со входной точки в СУБД. В SQL SERVER конечной точкой является экземпляр (instance), в котором конечно могут быть отдельные базы данных, но конфигурация и модель безопасности единая для всего экземпляра. В DB2 же точка входа выглядит так - экземпляр (который соответствует конкретному порту) - база данных. При этом конфигурация есть и для целиком экземпляра, и для отдельной базы данных.
Посмотреть конфигурацию экземпляра можно либо с помощью db2-команды:
Где будут указаны параметры, их значение и расшифровка. Возможен также сокращенный вариант:
Либо с помощью запроса:
Из важных параметров можно отметить:
Либо примерно таким же запросом, как и ранее:
Большим отличием DB2 от других СУБД является модель аутентификации. Здесь нет внутренних пользователей, как в SQL Server или MySQL. Вся аутентификация производится внешними по отношению к СУБД средствами (динамически подгружаемыми плагинами) - средствами операционной системы либо внешними плагинами (Kerberos,GSS API). Тип аутентификации задается в параметре AUTHENTICATION конфигурации менеджера БД. По умолчанию выставлено значение SERVER - имя пользователя и пароль передается в открытом виде и данная пара проверяется на правильность средствами операционной системы. Если имя пользователя и пароль верны, то проверяется наличие привилегии CONNECT у пользователя или групп, в которые он входит (в т.ч. специальная группа PUBLIC, куда входят все авторизованные пользователи). Данные привилегии можно посмотреть в таблице SYSCAT.DBAUTH:
Большой ошибкой при настройке является включение типа аутентификации CLIENT. В этом случае DB2 доверяет проведение аутентификации подключаемому клиенту и если у PUBLIC есть привилегия CONNECT, то любой пользователь сможет подключиться к БД и получит доступ ко всем данным, которые есть у PUBLIC. Имя пользователя при этом берется из операционной системы. То есть если мы подключаемся через Data Studio пользователем Administrator, то будут предоставлены все привилегии, которые есть у данного пользователя. И в этом случае нет разницы, с какого компьютера был произведен доступ. Данный тип аутентификации рекомендуется включать только тогда, когда есть защищенный канал между сервером и клиентом, и другие клиенты не смогут подключиться к СУБД.
Привилегии уровня конкретного экземпляра прописываются в конфигурации менеджера БД. Это следующие привилегии:
Далее есть привилегии конкретной базы данных. Это такие привилегии, как доступ к базе данных (CONNECTAUTH), создание таблиц (CREATETABAUTH), создание подпрограмм (EXTERNALROUTINEAUTH) и тд. Данные привилегии можно просмотреть в представлении SYSCAT.DBAUTH
И наконец привилегии доступа к конкретным данным - таблицам, подпрограммам и тд. Здесь все довольно тривиально, но тоже с некоторыми особенностями.
Привилегии доступа к таблицам можно просмотреть в представлении SYSCAT.TABAUTH. Тип выданной привилегии хранится в отдельных колонках, в зависимости от самой привилегии (SELECTAUTH,DELETEAUTH и тд). При выдачи привилегии с помощью команды GRANT для привилегий REFERENCES и UPDATE можно также указать имена колонок, на которые будут распространяться данные привилегии. В этом случае информацию об этом можно посмотреть в представлении SYSCAT.COLAUTH
Привилегии подпрограмм (функций, процедур и методов) можно посмотреть в SYSCAT.ROUTINEAUTH. Здесь не совсем все тривиально, в зависимости от полей SPECIFICNAME и TYPENAME привилегии могут быть выданы на все подпрограммы заданной схемы.
Если читателям понравится статья, то готов рассказать по поводу защиты данных в DB2 с помощью Label-Based Access Control
Точка входа
Начнем со входной точки в СУБД. В 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
Далее есть привилегии конкретной базы данных. Это такие привилегии, как доступ к базе данных (CONNECTAUTH), создание таблиц (CREATETABAUTH), создание подпрограмм (EXTERNALROUTINEAUTH) и тд. Данные привилегии можно просмотреть в представлении SYSCAT.DBAUTH
И наконец привилегии доступа к конкретным данным - таблицам, подпрограммам и тд. Здесь все довольно тривиально, но тоже с некоторыми особенностями.
Привилегии доступа к таблицам можно просмотреть в представлении SYSCAT.TABAUTH. Тип выданной привилегии хранится в отдельных колонках, в зависимости от самой привилегии (SELECTAUTH,DELETEAUTH и тд). При выдачи привилегии с помощью команды GRANT для привилегий REFERENCES и UPDATE можно также указать имена колонок, на которые будут распространяться данные привилегии. В этом случае информацию об этом можно посмотреть в представлении SYSCAT.COLAUTH
Привилегии подпрограмм (функций, процедур и методов) можно посмотреть в SYSCAT.ROUTINEAUTH. Здесь не совсем все тривиально, в зависимости от полей SPECIFICNAME и TYPENAME привилегии могут быть выданы на все подпрограммы заданной схемы.
Если читателям понравится статья, то готов рассказать по поводу защиты данных в DB2 с помощью Label-Based Access Control
Подписаться на:
Комментарии (Atom)