Аннотация
Apache Derby потрясающий! Особенно в среде микросервисов, где данные для служб (могут) сокращаются и не требуют более насыщенной СУБД. Derby потрясающий, потому что им так легко пользоваться, особенно когда речь идет о пользователях и разрешениях — они вам не нужны! Но, возможно, вы захотите создать пользователя уровня приложения с ограниченными разрешениями для использования в Derby. Цель этого блога — описать, как создавать пользователей с ограниченными правами на уровне приложений в Derby.
отказ
Этот пост является исключительно информативным. Критически подумайте, прежде чем использовать любую представленную информацию. Учитесь на этом, но в конечном итоге принимайте свои собственные решения на свой страх и риск.
Требования
Я сделал всю работу для этого поста, используя следующие основные технологии. Вы можете сделать то же самое с разными технологиями или версиями, но без гарантий.
- Apache Derby 10.14.1.0
- Java 1.8.0_152_x64
Я не собираюсь проходить процесс загрузки и установки этих технологий. Я оставлю это как упражнение для вас.
Запустите сетевой сервер Derby
Первое, что вы должны сделать, это запустить сетевой сервер Derby. В моем предыдущем сообщении в блоге под названием « Несколько сетевых серверов Derby на одном хосте» я дал подробные инструкции о том, как это сделать. Вот это tldr; (для Windows):
конфиг-resiste.cmd
1
2
3
4
5
6
7
8
9
|
@echo off REM --- START EDITING --- set DERBY_HOME=C:\Users\Michael\Applications\Derby\db-derby-10.14.1.0-bin set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_152 set NS_HOME=C:\Users\Michael\Applications\Derby\servers\resiste\data set NS_PORT=11528 REM --- STOP EDITING --- set PATH=%DERBY_HOME%\bin;%PATH% set DERBY_OPTS=-Dderby.drda.portNumber=%NS_PORT% -Dderby.system.home=%NS_HOME% |
старт-resiste.cmd
1
2
3
|
@echo off call config-resiste.cmd StartNetworkServer |
стоп-resiste.cmd
1
2
3
|
@echo off call config-resiste.cmd StopNetworkServer |
Теперь, когда вы можете запустить сетевой сервер Derby, давайте настроим его.
Настройте сетевой сервер Derby
Чтобы настроить сетевой сервер Derby, вам нужно создать файл derby.properties
. Но куда файл уходит? Это может пойти в паре разных мест. Давайте взглянем.
Сначала я предполагаю, что вы проигнорировали раздел « Запустить сетевой сервер Derby » выше и вместо этого запускаете Derby со всеми его значениями по умолчанию. В этом случае вы, вероятно, запустили сетевой сервер, найдя %DERBY_HOME%\bin\startNetworkServer.bat
и дважды щелкнув по нему. Если вы сделали это — крайне не рекомендуется — тогда Дерби считает, что %DERBY_HOME%\bin
является его системным каталогом. Вы можете подтвердить это, посмотрев %DERBY_HOME%\bin\derby.log
. Если подтверждено, вам нужно создать %DERBY_HOME%\bin\derby.properties
. Где бы ни derby.log
файл derby.log
, именно там вы создаете файл derby.properties
.
С другой стороны, если вы не игнорировали раздел « Запустить Derby Network Server » выше, поздравляем! Файл derby.properties
должен derby.properties
в каталоге, установленном системным свойством Java -Dderby.system.home
. Смотрите config-resiste.cmd
файла config-resiste.cmd
выше.
Теперь, когда вы знаете, куда поместить файл derby.properties
, вот (пример) того, что в него следует поместить:
01
02
03
04
05
06
07
08
09
10
11
|
# Passwords don't expire for 10 years derby.authentication.native.passwordLifetimeMillis=315360000000 # Use the best hash algorithm you can derby.authentication.builtin.algorithm=SHA-512 # Use a larger salt length for better security derby.authentication.builtin.saltLength=128 # Re-hash this number of times for better security derby.authentication.builtin.iterations=1564 |
Теперь у вас настроен сетевой сервер. Запустите это и давайте использовать это. Первое, для чего мы будем его использовать — это настройка пользователя администратора Derby. Мы посмотрим на это дальше.
Run ij
Перед настройкой пользователя-администратора Derby сначала необходимо запустить приложение ij
. ij
для Derby то же, что sqlplus
для Oracle; просто простой интерфейс командной строки. Найдите и запустите %DERBY_HOME%\bin\ij.bat
.
ПРИМЕЧАНИЕ Для остальной части блога приглашение "ij>"
будет указывать команды SQL, которые должны быть выполнены в ij
. Я предполагаю, что вы поймете, что вам нужно запустить ij
для выполнения этих команд.
Теперь, когда ij
запущен, мы выполним некоторую работу. Давайте посмотрим на этого пользователя администратора Derby.
Создать пользователя Admin
Теперь, когда сетевой сервер Derby настроен и работает, нам нужно настроить администратора. Пользователь с правами администратора будет иметь полные права для выполнения любой операции с базой данных. Давайте посмотрим на команды:
1
2
3
4
|
ij> connect 'jdbc:derby://localhost:11528/resiste;create=true;' user 'sa_resiste' ; ij> CALL SYSCS_UTIL.SYSCS_CREATE_USER( 'sa_resiste' , 'derby123' ); ij> disconnect; ij> exit; |
Строка 1 — это стандартная строка подключения JDBC для подключения к базе данных. Имя базы данных — resiste
. Поскольку это первое подключение к базе данных, строка подключения содержит create=true;
создать базу данных. Я подключаюсь к базе данных с пользователем sa_resiste
, и, поскольку база данных создается во время этого первого подключения, пользователь sa_resiste
будет настроен как пользователь с правами администратора. Строка 2 создает этого пользователя с паролем derby123
. Строки 3 и 4 затем отключаются от базы данных и выходят из ij
.
Перезапустите сетевой сервер сейчас
После перезапуска посмотрим, сработало ли это. Соединитесь с sa_resiste
и без пароля. Соединение получит ошибку аутентификации.
1
2
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' ; ERROR 08004: Connection authentication failure occurred. Reason: Userid or password invalid. |
Теперь соединитесь с sa_resiste
и паролем. Соединение будет успешным.
1
2
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123' ; ij> |
Хороший! Пользователь admin теперь создан. Далее мы будем использовать пользователя admin для создания таблицы. Эта таблица будет использоваться для проверки прав доступа пользователя уровня приложения, который мы создадим позже.
Создать тестовую таблицу
Теперь мы собираемся использовать пользователя admin для создания тестовой таблицы. Мы сделаем это по нескольким причинам.
- Убедитесь, что у администратора есть все разрешения и он может выполнять эти команды SQL.
- Проверьте разрешения пользователя уровня приложения, который мы создадим позже.
01
02
03
04
05
06
07
08
09
10
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123' ; ij> create schema testing; ij> set schema testing; ij> create table names (full_name varchar (100)); ij> insert into names values ( 'rita red' ); ij> select * from names; FULL_NAME ---------------------------------------------------------------------------------------------------- rita red ij> disconnect; |
Далее давайте создадим пользователя уровня приложения.
Создать пользователя приложения
Теперь самое интересное. Давайте создадим пользователя уровня приложения. Это будет пользователь с разрешением, ограниченным только теми операциями, которые может выполнять приложение. Например, если ваш Microservice только собирается получать данные, то пользователь уровня приложения должен иметь только разрешения SELECT для таблицы базы данных. Мы проверим разрешение пользователя на уровне приложения, но сначала давайте создадим пользователя.
1
2
3
4
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123' ; ij> CALL SYSCS_UTIL.SYSCS_CREATE_USER( 'oscar' , 'orange' ); ij> disconnect; ij> exit; |
Перезапустите сетевой сервер сейчас
После перезапуска посмотрим, сработало ли это. Связаться с oscar
. Соединение будет успешным, но у oscar
не будет разрешения на чтение тестовой таблицы.
1
2
3
4
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'oscar' password 'orange' ; ij> select * from testing.names; ERROR 42502: User 'OSCAR' does not have SELECT permission on column 'FULL_NAME' of table 'TESTING' . 'NAMES' . ij> disconnect; |
Даже если оператор SELECT не выполнен, неудача означает успешное тестирование. oscar
нет прав доступа, поэтому он не должен быть в состоянии выбирать из тестовой таблицы. Давайте настроим oscar
дальше.
Настройте пользователя приложения
Давайте установим некоторые разрешения для oscar
. Конечно, для этого sa_resiste
администратор sa_resiste
.
1
2
3
4
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123' ; ij> set schema testing; ij> grant select on names to oscar; ij> disconnect; |
Это даст oscar
только 1 разрешение: выбирать из таблицы TESTING.NAMES. Посмотрим, сработало ли это.
1
2
3
4
5
6
|
ij> connect 'jdbc:derby://localhost:11528/resiste' user 'oscar' password 'orange' ; ij> select * from testing.names; FULL_NAME ---------------------------------------------------------------------------------------------------- rita red ij> disconnect; |
Поздравляем! Теперь у вас есть пользователь уровня приложения с ограниченными разрешениями в базе данных Derby.
Резюме
Надеюсь, вам понравилось учиться делать простое администрирование пользователей с помощью Derby.
Опубликовано на Java Code Geeks с разрешения Майкла Ремиджана, партнера нашей программы JCG. См. Оригинальную статью здесь: Пользователи базы данных Apache Derby и разрешения
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |