MySQL - один из поддерживаемых плагинов для механизма секретов баз данных. Этот плагин генерирует учетные данные базы данных динамически на основе настроенных ролей для базы данных MySQL, а также поддерживает статические роли.
Этот плагин имеет несколько различных экземпляров, встроенных в Stronghold, каждый из которых предназначен для немного разных драйверов MySQL. Единственное различие между этими плагинами заключается в длине имен пользователей, генерируемых плагином, так как разные версии mysql принимают разные длины. Доступны следующие плагины:
- mysql-database-plugin
- mysql-aurora-database-plugin
- mysql-rds-database-plugin
- mysql-legacy-database-plugin
Подробнее о настройке механизма секретов баз данных database secrets engine.
Возможности
Имя плагина | Изменение Root учетной записи | Динамические роли | Статические роли | Кастомизация имени пользователя |
---|---|---|---|---|
Может меняться | Да | Да | Да | Да |
Установка
- Включите механизм секретов базы данных, если он еще не включен:
$ d8 stronghold secrets enable database
Success! Enabled the database secrets engine at: database/
По умолчанию механизм секретов будет включаться на основе его имени.
Чтобы включить механизм секретов по другому пути, используйте аргумент -path
.
- Настройте Stronghold с помощью соответствующего плагина и информации о подключении:
$ d8 stronghold write database/config/my-mysql-database \
plugin_name=mysql-database-plugin \
connection_url=":@tcp(127.0.0.1:3306)/" \
allowed_roles="my-role" \
username="strongholduser" \
password="strongholdpass"
- Настройте роль, которая сопоставляет имя в Stronghold с SQL запросом, выполняемым для создания учетной записи базы данных:
$ d8 stronghold write database/roles/my-role \
db_name=my-mysql-database \
creation_statements="CREATE USER ''@'%' IDENTIFIED BY '';GRANT SELECT ON *.* TO ''@'%';" \
default_ttl="1h" \
max_ttl="24h"
Success! Data written to: database/roles/my-role
Использование
После того как механизм секретов настроен и у пользователя/машины есть токен Stronghold с соответствующими правами, он может генерировать учетные данные.
- Сгенерируйте новую учетную запись, используя
/creds
и имя роли:
$ d8 stronghold read database/creds/my-role
Key Value
--- -----
lease_id database/creds/my-role/2f6a614c-4aa2-7b19-24b9-ad944a8d4de6
lease_duration 1h
lease_renewable true
password yY-57n3X5UQhxnmFRP3f
username v_strongholduser_my-role_crBWVqVh2Hc1
Проверка подлинности сертификата клиента x509
Этот плагин поддерживает использование MySQL’s x509 Client-side Certificate Authentication
Чтобы использовать этот механизм аутентификации, настройте плагин:
$ d8 stronghold write database/config/my-mysql-database \
plugin_name=mysql-database-plugin \
allowed_roles="my-role" \
connection_url="user:password@tcp(localhost:3306)/test" \
tls_certificate_key=@/path/to/client.pem \
tls_ca=@/path/to/client.ca
Примечание: tls_certificate_key
и tls_ca
соответствуют ssl-cert (combined with ssl-key)
и ssl-ca
настройкам конфигурации из MySQL, за исключением того, что параметры
Stronghold - это содержимое этих файлов, а не имена файлов. Таким образом, эти два
параметра не зависят друг от друга. См. раздел MySQL Connection Options
для получения дополнительной информации.
Примеры
Использование шаблонов в grant statements
MySQL поддерживает использование шаблонов в grant statements. Это иногда необходимо приложениям,
которые ожидают доступа к большому количеству баз данных внутри MySQL.
Это можно реализовать, используя шаблоны в grant statements. Например, если
вы хотите, чтобы пользователь, созданный Stronghold, имел доступ ко всем
базам данных, начинающимся с fooapp_
, вы можете использовать следующий оператор создания:
CREATE USER ''@'%' IDENTIFIED BY ''; GRANT SELECT ON `fooapp\_%`.* TO ''@'%';
MySQL ожидает, что часть, в которой должны быть помещены шаблоны, будет находиться внутри кавычек. Если вы хотите добавить этот стейтмент создания в Stronghold через Stronghold CLI, вы не можете просто вставить вышеприведенный оператор в CLI, потому что shell интерпретирует текст между кавычками как нечто, что должно быть выполнено. Самый простой способ обойти это - закодировать стейтмент создания в Base64 и передать его в Stronghold. Например:
$ d8 stronghold write database/roles/my-role \
db_name=mysql \
creation_statements="Q1JFQVRFIFVTRVIgJ3t7bmFtZX19J0AnJScgSURFTlRJRklFRCBCWSAne3twYXNzd29yZH19JzsgR1JBTlQgU0VMRUNUIE9OIGBmb29hcHBcXyVgLiogVE8gJ3t7bmFtZX19J0AnJSc7" \
default_ttl="1h" \
max_ttl="24h"
Изменение root учетных данных in MySQL 5.6
По умолчанию для MySQL используется синтаксис ALTER USER
, присутствующий в MySQL 5.7 и выше.
Для MySQL 5.6, root_rotation_statements
должны быть настроены на использование старого синтаксиса SET PASSWORD
.
Например:
$ d8 stronghold write database/config/my-mysql-database \
plugin_name=mysql-database-plugin \
connection_url=":@tcp(127.0.0.1:3306)/" \
root_rotation_statements="SET PASSWORD = PASSWORD('')" \
allowed_roles="my-role" \
username="root" \
password="mysql"