В 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
пятница, 9 сентября 2011 г.
На первый раз сойдет
С приходом Собянина многое в столице стало меняться. Самые значительные положительные изменения, которые описывали СМИ и различные блоггеры - это укладка плитки вместо асфальта на тротуарах, новые парковочные места для машин и недавнее событие - велосипедная дорожка на проспекте Вернадского. И при реализации всего этого как обычно нашлись косяки и результат только на словах.
Плитку кладут как попало, с зазорами, не выравнивая поверхность, кладут плитку со сколами и тд. Новые парковочные места делаются на бумаге, в реальности на одно парковочное место может поместиться только треть машины или один велописед (http://www.ridus.ru/news/1110/). А велосипедную дорожку просто нарисовали на существующей автомобильной дороге, не заморачиваясь на люки, ограждения на пути, штрафы водителям, которые едут по этой дороге. Но удивление вызывает не это, к такому поведению все давно привыкли и никто особо не возмущается (но и одобрения нет). Удивляет отношение некоторых людей - "хорошо, что хоть что-то делают". То есть наши люди настолько привыкли, что государство вообще ничего не делает, что даже откровенную халтуру начинает одобрять. Такое ощущение, что государство все это делает бесплатно, на деньги, которые упали с неба и поэтому что же с них требовать.
Касаемо плитки некоторые личности вообще пишут "что это же первый опыт, когда будут перекладывать, уложат лучше". Извините, а почему это первый опыт? Я могу сказать это про себя, если я вдруг буду укладывать плитку на даче и положу ее криво и с щелями. У меня это действительно будет первый опыт и что с меня еще требовать. Но ведь строители-то не первый раз этим занимаются (по крайней мере должно быть так).
И скажите, если у вас строители будут делать ремонт дома, и сделают его как попало, вы тоже будете говорить "ну это ведь первый раз, на следующий год гораздо лучше будет" или будете требовать переделать или вернуть деньги? Более чем уверен, что второе. Так почему тогда при этих же работах, но в рамках города мы думаем иначе?
Плитку кладут как попало, с зазорами, не выравнивая поверхность, кладут плитку со сколами и тд. Новые парковочные места делаются на бумаге, в реальности на одно парковочное место может поместиться только треть машины или один велописед (http://www.ridus.ru/news/1110/). А велосипедную дорожку просто нарисовали на существующей автомобильной дороге, не заморачиваясь на люки, ограждения на пути, штрафы водителям, которые едут по этой дороге. Но удивление вызывает не это, к такому поведению все давно привыкли и никто особо не возмущается (но и одобрения нет). Удивляет отношение некоторых людей - "хорошо, что хоть что-то делают". То есть наши люди настолько привыкли, что государство вообще ничего не делает, что даже откровенную халтуру начинает одобрять. Такое ощущение, что государство все это делает бесплатно, на деньги, которые упали с неба и поэтому что же с них требовать.
Касаемо плитки некоторые личности вообще пишут "что это же первый опыт, когда будут перекладывать, уложат лучше". Извините, а почему это первый опыт? Я могу сказать это про себя, если я вдруг буду укладывать плитку на даче и положу ее криво и с щелями. У меня это действительно будет первый опыт и что с меня еще требовать. Но ведь строители-то не первый раз этим занимаются (по крайней мере должно быть так).
И скажите, если у вас строители будут делать ремонт дома, и сделают его как попало, вы тоже будете говорить "ну это ведь первый раз, на следующий год гораздо лучше будет" или будете требовать переделать или вернуть деньги? Более чем уверен, что второе. Так почему тогда при этих же работах, но в рамках города мы думаем иначе?
среда, 17 августа 2011 г.
О наболевшем
Как-то раз я говорил, что в пробках виноваты сами водители, что зачастую именно они и создают заторы, выезжая на светофор на мигающий зеленый или объезжая пробку по обочине. Но за время езды в этих же пробках было время тщательно подумать, и проанализировать действия водителей. Так вот, все-таки виновато правительство (власть, полиция и тд). Объясню почему.
Большинство людей представляет собой безликую массу, у которой нет своего мнения, нет права выбора и им по сути ничего не нужно. И есть некоторое количество людей, которые в той или иной мере представляют собой личность. Порой хорошую личность, порой плохую личность, которая лучше бы была частью безликой массы, но все равно личность. Личность обладает способностью думать и принимать решения. И безликая масса часто следует за этой личностью, даже не задумываясь о характере ее поведения, причинах и тем более последствиях.
Примеров такого стадного поведения можно привести очень много. В стандартной ситуации, когда образуется небольшой затор на дороге, n-ное время все дружно стоят и радуются жизни (безликая масса). Но стоит найтись одной личности, которая ставит себя выше этой массы и объезжает всех по обочине, то часть этой массы сразу же следует за ним. Пусть это будет пример "темной" личности. Есть и "светлые" личности, которые перегораживают дорогу массе, заставляя вернуть обратно, но таких меньшинство и с них редко кто берет пример.
И правительство в данной ситуации должно регулировать такие ситуации, т.к. масса всегда будет пытаться выйти из дозволенных границ. И возвращать обратно нужно только ударами кнута, что в данном случае означает очень высокие штрафы. Личности останутся и в этих случаях, но на то они и личности. И только тогда по двухрядной дороге будет ехать 2 ряда, а не 5, как сейчас.
Большинство людей представляет собой безликую массу, у которой нет своего мнения, нет права выбора и им по сути ничего не нужно. И есть некоторое количество людей, которые в той или иной мере представляют собой личность. Порой хорошую личность, порой плохую личность, которая лучше бы была частью безликой массы, но все равно личность. Личность обладает способностью думать и принимать решения. И безликая масса часто следует за этой личностью, даже не задумываясь о характере ее поведения, причинах и тем более последствиях.
Примеров такого стадного поведения можно привести очень много. В стандартной ситуации, когда образуется небольшой затор на дороге, n-ное время все дружно стоят и радуются жизни (безликая масса). Но стоит найтись одной личности, которая ставит себя выше этой массы и объезжает всех по обочине, то часть этой массы сразу же следует за ним. Пусть это будет пример "темной" личности. Есть и "светлые" личности, которые перегораживают дорогу массе, заставляя вернуть обратно, но таких меньшинство и с них редко кто берет пример.
И правительство в данной ситуации должно регулировать такие ситуации, т.к. масса всегда будет пытаться выйти из дозволенных границ. И возвращать обратно нужно только ударами кнута, что в данном случае означает очень высокие штрафы. Личности останутся и в этих случаях, но на то они и личности. И только тогда по двухрядной дороге будет ехать 2 ряда, а не 5, как сейчас.
пятница, 8 июля 2011 г.
Чтение реестра через T-SQL
Немногие знают, но через запросы к базе Microsoft SQL можно читать реестр и соответственно писать в него. Делается это с помощью нескольких встроенных функций:
xp_regread
xp_instance_regread
xp_regwrite
и тд
Эти процедуры являются недокументированными, поэтому в какой-то момент (а именно после 2000 SP4) логика их работы поменялась и для непривилегированных юзеров стали выдаваться ошибки.
На сайте microsoft есть документ, как исправлять это.
Хоть там и написано, что ошибка идет после установки 2000 SP4, в 2005 и 2008 сервере логика работы осталась прежней.
Но как обычно, там есть неточности и некоторые моменты не оговорены.
Во-первых, как узнать имя ключа в реестре для своего инстанса.
Идем в данную ветку:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
Здесь смотрим параметр с именем вашего инстанса, например, MSSQL.3
Во-вторых, создаем ветку в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.3\MSSQLServer\ExtendedProcedures
По умолчанию, этот ключ не создан, его нужно создавать вручную.
В этом ключе уже создаем нужный нам параметр - для чтения или записи реестра ("Xp_regread Allowed Paths" или "Xp_regwrite_Allowed Paths"). Тип данного ключа - REG_MULTI_SZ
И в конце концов, в этом параметре прописываем нужные нам для чтения или записи ветки, по одному на строчку. И обратите внимание - ключ должен быть без символа "\" в конце. Иначе по непонятным причинам сервер mssql при чтении этого параметра получает Buffer Overflow и в запросе вернется ошибка "Access is denied"
xp_regread
xp_instance_regread
xp_regwrite
и тд
Эти процедуры являются недокументированными, поэтому в какой-то момент (а именно после 2000 SP4) логика их работы поменялась и для непривилегированных юзеров стали выдаваться ошибки.
На сайте microsoft есть документ, как исправлять это.
Хоть там и написано, что ошибка идет после установки 2000 SP4, в 2005 и 2008 сервере логика работы осталась прежней.
Но как обычно, там есть неточности и некоторые моменты не оговорены.
Во-первых, как узнать имя ключа в реестре для своего инстанса.
Идем в данную ветку:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
Здесь смотрим параметр с именем вашего инстанса, например, MSSQL.3
Во-вторых, создаем ветку в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.3\MSSQLServer\ExtendedProcedures
По умолчанию, этот ключ не создан, его нужно создавать вручную.
В этом ключе уже создаем нужный нам параметр - для чтения или записи реестра ("Xp_regread Allowed Paths" или "Xp_regwrite_Allowed Paths"). Тип данного ключа - REG_MULTI_SZ
И в конце концов, в этом параметре прописываем нужные нам для чтения или записи ветки, по одному на строчку. И обратите внимание - ключ должен быть без символа "\" в конце. Иначе по непонятным причинам сервер mssql при чтении этого параметра получает Buffer Overflow и в запросе вернется ошибка "Access is denied"
среда, 6 июля 2011 г.
Изменения в ПДД
По информации из проверенных источников, в ближайшее время планируется внеси поправки в ПДД. Обсуждение данных поправок идет с кодовым названием "Для самых умных". Удалось узнать основные изменения:
8.13. Правилом 8.9. данного документа следует пользоваться при любых перестроениях налево, особенно в случаях поворота налево из крайнего правого ряда.
9.13. На дорогах с двусторонним движением, в случае если все полосы попутного направления заняты, необходимо двигаться по асфальтированной обочине. В случае если водитель очень торопится, возможно движение по неасфальтированной обочине или прилегающем участке земли. Движение по обочине возможно в один ряд. Водители полностью затонированных ТС, а также водители ТС с повышенной проходимостью могут двигаться по обочине в два или три ряда.
10.6. Разрешается превышение установленных ограничений скорости на 20км/час - за такое нарушение вас не будет останавливать инспектор ДПС.
10.7. В случае если в поле видимости водителя нет дорожных камер или патрулей ДПС, максимально возможная скорость движения ТС устанавливается самим водителем в зависимости от умений вождения и скоростных характеристик ТС (прим. - тонировка передней полусферы увеличивает максимально возможную скорость в два раза).
12.9. Включение аварийной световой сигнализации разрешает остановку и стоянку в любом месте проезжей части.
13.14. При образовании затора на пересечении проезжих частей необходимо выезжать на перекресток, подавая звуковые сигналы водителям попутного направления.
13.15. При включении желтого сигнала светофора водителям встречного потока необходимо начать плавно выезжать за пределы перекрестка, чтобы при включении зеленого сигнала светофора можно было резко ускориться.
13.16. Если невозможно определить тип покрытия дороги, и нет знаков приоритета (также допускается случай, что водитель ТС не заметил данные знаки), то водитель должен считать, что находится на главной дороге и при подъезде к перекрестку необходимо развить максимально возможную скорость.
14.8. Водитель транспортного средства не должен пропускать пешеходов - не столб, отойдут.
19.10. Звуковые сигналы могут применяться при езде по обочине, чтобы водители, которым очень нравится стоять в пробке, предоставили приоритет сзади едущему ТС.
8.13. Правилом 8.9. данного документа следует пользоваться при любых перестроениях налево, особенно в случаях поворота налево из крайнего правого ряда.
9.13. На дорогах с двусторонним движением, в случае если все полосы попутного направления заняты, необходимо двигаться по асфальтированной обочине. В случае если водитель очень торопится, возможно движение по неасфальтированной обочине или прилегающем участке земли. Движение по обочине возможно в один ряд. Водители полностью затонированных ТС, а также водители ТС с повышенной проходимостью могут двигаться по обочине в два или три ряда.
10.6. Разрешается превышение установленных ограничений скорости на 20км/час - за такое нарушение вас не будет останавливать инспектор ДПС.
10.7. В случае если в поле видимости водителя нет дорожных камер или патрулей ДПС, максимально возможная скорость движения ТС устанавливается самим водителем в зависимости от умений вождения и скоростных характеристик ТС (прим. - тонировка передней полусферы увеличивает максимально возможную скорость в два раза).
12.9. Включение аварийной световой сигнализации разрешает остановку и стоянку в любом месте проезжей части.
13.14. При образовании затора на пересечении проезжих частей необходимо выезжать на перекресток, подавая звуковые сигналы водителям попутного направления.
13.15. При включении желтого сигнала светофора водителям встречного потока необходимо начать плавно выезжать за пределы перекрестка, чтобы при включении зеленого сигнала светофора можно было резко ускориться.
13.16. Если невозможно определить тип покрытия дороги, и нет знаков приоритета (также допускается случай, что водитель ТС не заметил данные знаки), то водитель должен считать, что находится на главной дороге и при подъезде к перекрестку необходимо развить максимально возможную скорость.
14.8. Водитель транспортного средства не должен пропускать пешеходов - не столб, отойдут.
19.10. Звуковые сигналы могут применяться при езде по обочине, чтобы водители, которым очень нравится стоять в пробке, предоставили приоритет сзади едущему ТС.
Подписаться на:
Комментарии (Atom)