Este artículo presenta principalmente el contenido relevante de la gestión de usuarios y el control de acceso en el sistema de seguridad OceanBase (modo MySQL) comparando MySQL y OceanBase, incluida la gestión de usuarios, el control de autoridad de operación del usuario, el control de acceso de seguridad de red, el control de autoridad de nivel de fila, la gestión de roles. .
Autor: Jin Changlong
Ingeniero de pruebas de Acson, responsable de las pruebas de los productos DMP.
Fuente de este artículo: contribución original
* Producido por la comunidad de código abierto de Aikesheng, no se permite usar el contenido original sin autorización, comuníquese con el editor e indique la fuente para la reimpresión.
Este artículo presenta principalmente el contenido relevante de la gestión de usuarios y el control de acceso en el sistema de seguridad OceanBase (modo MySQL) comparando MySQL y OceanBase, incluida la gestión de usuarios, el control de autoridad de operación del usuario, el control de acceso de seguridad de red, el control de autoridad de nivel de fila, la gestión de roles. .
Gestión de usuarios
1.1 Conceptos básicos
arrendatario
El inquilino de la base de datos OceanBase es un concepto lógico y una unidad de asignación de recursos. Los datos entre los inquilinos de la base de datos de OceanBase están completamente aislados y cada inquilino es equivalente a una instancia de base de datos de una base de datos tradicional.
Los inquilinos de la base de datos de OceanBase se dividen en: inquilinos del sistema e inquilinos comunes .
- La base de datos de OceanBase predefine el inquilino del sistema (
sys
inquilino) para la administración, y su modo de compatibilidad es MySQL - Los inquilinos ordinarios se dividen en inquilinos en modo Oracle e inquilinos en modo MySQL
usuario
Los usuarios de la base de datos de OceanBase se dividen en: usuarios de inquilinos del sistema y usuarios de inquilinos comunes .
- El administrador del sistema integrado del arrendatario del sistema es el usuario raíz
- El administrador de arrendatarios integrado para el arrendatario de MySQL es el usuario raíz
- El administrador de inquilinos integrado para el inquilino de Oracle es el usuario sys
- Al crear un usuario, si el arrendatario de la sesión actual es un arrendatario del sistema, el usuario recién creado es un usuario arrendatario del sistema; de lo contrario, es un usuario arrendatario común
1.2 Sintaxis del nombre de usuario
Los nombres de usuario que aparecen en las declaraciones SQL (como: CREATE USER
, GRANT
, SET PASSWORD
) deben seguir algunas reglas y probar si el rendimiento de estas reglas es consistente en OceanBase y MySQL.
OceanBase
# 用户名称语法为 'user_name'@'host_name'
obclient [oceanbase]> create user 'test01'@'%' identified by '123456';
Query OK, 0 rows affected (0.017 sec)
# @'host_name' 部分是可选的
obclient [oceanbase]> create user test02;
Query OK, 0 rows affected (0.017 sec)
# 如果用户名和主机名作为不带引号的标识符是合法的,则无需将其引号括起来。如果 user_name 字符串包含特殊字符(如空格或 -),或者 host_name 字符串包含特殊字符或通配符(如 . 或 %),则必须使用引号
obclient [oceanbase]> create user test02@%;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near '%' at line 1
obclient [oceanbase]> create user test02@sun;
Query OK, 0 rows affected (0.027 sec)
# 主机值可以是主机名或 IP 地址(IPv4 或 IPv6)
obclient [oceanbase]> create user 'test02'@'127.0.0.1';
Query OK, 0 rows affected (0.021 sec)
# 主机名或 IP 地址值中允许使用 % 和 _ 通配符
obclient [oceanbase]> create user 'test02'@'%.mysql.com';
Query OK, 0 rows affected (0.016 sec)
# 对于指定为 IPv4 地址的主机值,可以提供一个网络掩码来指示要用于网络号的地址位数
obclient [oceanbase]> CREATE USER 'test02'@'198.51.100.0/255.255.255.0';
Query OK, 0 rows affected (0.017 sec)
# 指定为 IPv4 地址的主机值可以使用 CIDR 表示法写入
obclient [oceanbase]> CREATE USER 'test02'@'198.51.100.0/24';
Query OK, 0 rows affected (0.028 sec)
mysql
# 用户名称语法为'user_name'@'host_name'
mysql [localhost:8031] {msandbox} ((none)) > create user 'test01'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.03 sec)
# @'host_name' 部分是可选的
mysql [localhost:8031] {root} ((none)) > create user test02;
Query OK, 0 rows affected (0.03 sec)
# 如果用户名和主机名作为不带引号的标识符是合法的,则无需将其引号括起来。如果 user_name 字符串包含特殊字符(如空格或 -),或者 host_name 字符串包含特殊字符或通配符(如 . 或 %),则必须使用引号
mysql [localhost:8031] {root} ((none)) > create user test02@%;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' at line 1
mysql [localhost:8031] {root} ((none)) > create user test02@sun;
Query OK, 0 rows affected (0.03 sec)
# 主机值可以是主机名或 IP 地址(IPv4 或 IPv6)
mysql [localhost:8031] {root} ((none)) > create user 'test02'@'127.0.0.1';
Query OK, 0 rows affected (0.01 sec)
# 主机名或 IP 地址值中允许使用 % 和 _ 通配符
mysql [localhost:8031] {root} ((none)) > create user 'test02'@'%.mysql.com';
Query OK, 0 rows affected (0.03 sec)
# 对于指定为 IPv4 地址的主机值,可以提供一个网络掩码来指示要用于网络号的地址位数
mysql [localhost:8031] {root} ((none)) > CREATE USER 'test02'@'198.51.100.0/255.255.255.0';
Query OK, 0 rows affected (0.02 sec)
# 从 MySQL 8.0.23 开始,指定为 IPv4 地址的主机值可以使用 CIDR 表示法写入
mysql [localhost:8031] {root} ((none)) > CREATE USER 'test02'@'198.51.100.0/24';
Query OK, 0 rows affected (0.04 sec)
Resultados de la prueba: Rendimiento consistente .
1.3 Configuración de contraseña de usuario
Las declaraciones comunes de asignación de contraseñas son: CREATE USER
, ALTER USER
, SET PASSWORD
, para probar el soporte de la sintaxis en OceanBase y MySQL.
OceanBase
obclient [oceanbase]> CREATE USER 'jeffrey'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.018 sec)
obclient [oceanbase]> ALTER USER 'jeffrey'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.017 sec)
obclient [oceanbase]> SET PASSWORD FOR 'jeffrey'@'%' = 'password';
ERROR 1827 (42000): The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.
obclient [oceanbase]> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('password');
Query OK, 0 rows affected (0.015 sec)
obclient [(none)]> ALTER USER USER() IDENTIFIED BY 'password';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near '() IDENTIFIED BY 'password'' at line 1
mysql
mysql [localhost:8031] {msandbox} ((none)) > CREATE USER 'jeffrey'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.53 sec)
mysql [localhost:8031] {msandbox} ((none)) > ALTER USER 'jeffrey'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql [localhost:8031] {msandbox} ((none)) > SET PASSWORD FOR 'jeffrey'@'%' = 'password';
Query OK, 0 rows affected (0.02 sec)
mysql [localhost:8031] {msandbox} ((none)) > SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('password');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PASSWORD('password')' at line 1
mysql [localhost:8031] {jeffrey} ((none)) > ALTER USER USER() IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.03 sec)
Resultados de la prueba:
- La sintaxis de las dos bases de datos
set password
es ligeramente diferente. - La instrucción MySQL
alter user
admiteuser()
la función, pero OceanBase no admite este método de escritura.
Cambie la contraseña a través de la herramienta de línea de comandos:
- OceanBase: Ninguno por ahora.
- MySQL: se puede
mysqladmin
modificar a través de la herramienta.
Problemas específicos de contraseña:
- OceanBase: Ninguno por ahora.
- MySQL: si está utilizando la replicación de MySQL, las contraseñas utilizadas actualmente por las réplicas como
CHANGE REPLICATION SOURCE TO
declaraciones (desde MySQL 8.0.23) oCHANGE MASTER TO
declaraciones (anteriores a MySQL 8.0.23) están efectivamente limitadas a una longitud de 32 caracteres; si la contraseña es más larga, todos los caracteres adicionales se truncarán. Esto no se debe a ninguna limitación normalmente impuesta por el servidor MySQL, sino a un problema específico de la replicación de MySQL.
1.4 Bloqueo de usuario
Pruebe si la declaración de OceanBase y MySQL admite ALTER USER
el bloqueo de usuarios .CREATE USER
OceanBase
obclient [oceanbase]> alter user 'jeffrey'@'%' account unlock;
Query OK, 0 rows affected (0.004 sec)
obclient [oceanbase]> alter user 'jeffrey'@'%' account lock;
Query OK, 0 rows affected (0.019 sec)
obclient [oceanbase]> create user 'jin'@'%' account lock;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'account lock' at line 1
OceanBase puede confirmar el estado de bloqueo del usuario a través del campo __all_user
en la tabla is_locked
.
mysql
mysql [localhost:8031] {msandbox} ((none)) > alter user 'jeffrey'@'%' account unlock;
Query OK, 0 rows affected (0.03 sec)
mysql [localhost:8031] {msandbox} ((none)) > alter user 'jeffrey'@'%' account lock;
Query OK, 0 rows affected (0.03 sec)
mysql [localhost:8031] {msandbox} ((none)) > create user 'jin'@'%' account lock;
Query OK, 0 rows affected (0.01 sec)
MySQL puede confirmar el estado de bloqueo del usuario a través del campo mysql.user
en la tabla .account_locked
Resultados de la prueba:
- OceanBase:
ALTER USER
admite el bloqueo de usuarios,CREATE USER
no admite el bloqueo de usuarios. - MySQL:
ALTER USER
yCREATE USER
ambos admiten el bloqueo de usuarios.
Control de autoridad de operación del usuario
2.1 Gestión de derechos
OceanBase
Los permisos de OceanBase (modo MySQL) se dividen en 3 niveles:
- Permisos administrativos: Permisos que pueden afectar a todo el inquilino, como: modificar la configuración del sistema, acceder a todas las tablas, etc.
- Permiso de base de datos: puede afectar el permiso de todos los objetos bajo una base de datos específica, por ejemplo: crear y eliminar tablas, acceder a tablas y otros permisos bajo la base de datos correspondiente.
- Permisos de objeto: permisos que pueden afectar a un objeto específico, por ejemplo: permiso para acceder a una tabla, vista o índice específico.
Para obtener una lista de todos los permisos de OceanBase actual (modo MySQL), puede consultar el documento oficial de OB Clasificación de permisos en modo MySQL .
mysql
Los permisos de MySQL también se dividen en 3 niveles:
Privilegios administrativos: los privilegios administrativos permiten a un usuario administrar el funcionamiento del servidor MySQL. Estos privilegios son globales en el sentido de que no son específicos de una base de datos en particular.
Privilegios de la base de datos: los privilegios de la base de datos se aplican a la base de datos y todos los objetos dentro de ella. Estos permisos se pueden otorgar para bases de datos específicas o globalmente para que se apliquen a todas las bases de datos.
Privilegios de objeto: se pueden otorgar en un objeto de base de datos (por ejemplo, tabla, índice, vista y rutinas almacenadas).
MySQL también distingue entre permisos estáticos y permisos dinámicos Para obtener una lista específica de permisos, consulte el documento oficial de MySQL Privilegios proporcionados por MySQL .
Comparación de gestión de derechos
- Los niveles de permiso de usuario se dividen en tres niveles y los significados expresados son consistentes.
- Los permisos de subdivisión son similares y OceanBase aún no admite algunos. Según el documento oficial de OB, algunos campos están reservados en el formulario de autorización pero aún no son compatibles.
- Varios permisos exclusivos de OceanBase:
ALTER TENANT
,ALTER SYSTEM
,CREATE RESOURCE POOL
,CREATE RESOURCE UNIT
. - OceanBase actualmente no admite permisos dinámicos para MySQL.
2.2 Declaración de autorización
- Autorizar GRANT
- revocar autorización REVOCAR
- Delegación de autorización CON OPCIÓN DE CONCESIÓN
- Ver permisos de usuario MOSTRAR CONCESIONES
Resultados de la prueba: OceanBase (modo MySQL) y MySQL son consistentes en términos de declaraciones de autorización y sintaxis.
2.3 Formulario de autorización
OceanBase
biblioteca relacionada | tabla relacionada |
---|---|
mysql |
mysql.user mysql.db |
information_schema |
information_schema.COLUMN_PRIVILEGES information_schema.SCHEMA_PRIVILEGES information_schema.TABLE_PRIVILEGES information_schema.USER_PRIVILEGES |
oceanbase |
oceanbase.DBA_OB_DATABASE_PRIVILEGE oceanbase.CDB_OB_DATABASE_PRIVILEGE |
mysql
biblioteca relacionada | tabla relacionada |
---|---|
mysql |
user global_grants db tables_priv columns_priv procs_priv proxies_priv default_roles role_edges password_history |
information_schema |
information_schema.COLUMN_PRIVILEGES information_schema.SCHEMA_PRIVILEGES information_schema.TABLE_PRIVILEGES information_schema.USER_PRIVILEGES |
Resultados de la prueba: OceanBase (modo MySQL) y MySQL son bastante diferentes en la realización de la tabla de autorización.
2.4 Retiro parcial de las restricciones de permisos
OceanBase
No se admite la revocación parcial de permisos globales.
mysql
Después de activar la variable partial_revokes
, el permiso global se puede revocar parcialmente.
Resultados de la prueba: OceanBase no admite la revocación parcial de permisos globales.
Control de acceso de seguridad de red
OceanBase
La base de datos de OceanBase proporciona políticas de lista blanca de inquilinos para implementar el control de acceso de seguridad de la red. La lista blanca de inquilinos hace referencia a la lista de clientes en los que el inquilino puede iniciar sesión. El sistema admite los siguientes formatos de lista blanca de inquilinos:
- El formato de la dirección IP, por ejemplo: 10.10.10.10, 10.10.10.11
- En forma de subred/máscara, por ejemplo: 10.10.10.0/24
- La forma de coincidencia parcial, por ejemplo: 10.10.10.% o 10.10.10._
- Formatos mixtos, por ejemplo: 10.10.10.10, 10.10.10.11, 10.10.10.%, 10.10.10._, 10.10.10.0/24
ob_tcp_invited_nodes
La lista blanca del arrendatario se puede configurar modificando la variable .
mysql
MySQL en sí mismo no encuentra una funcionalidad similar.
Resultados de la prueba: OceanBase admite la lista blanca en el control de acceso de seguridad de la red, pero MySQL en sí no lo admite.
Control de acceso a nivel de fila
OceanBase
El modo de arrendatario de MySQL no lo admite y se implementa a través de Label Security en el modo de arrendatario de Oracle.
mysql
No hay funcionalidad relacionada, se puede lograr indirectamente a través de vistas/disparadores .
Resultados de la prueba: ni OceanBase (modo MySQL) ni MySQL admiten el control de permisos a nivel de fila.
gestión de roles
OceanBase
No se admite en el modo de arrendatario de MySQL, pero sí en el modo de arrendatario de Oracle.
mysql
Gestión de roles de soporte.
Resultado de la prueba: OceanBase no admite la gestión de funciones.
Aquí pensamos en una pregunta: Debido a que MySQL admite la gestión de roles, ¿qué debemos hacer si migramos de MySQL a OceanBase?
Desde mi entendimiento personal, un rol es una colección de permisos, y sus beneficios son una forma conveniente de reemplazar una sola autorización y conceptualizar todos los permisos asignados. Entonces, si migra de MySQL a OceanBase, en teoría, puede expandir los permisos del rol.
resumen
En términos de administración de usuarios, OceanBase y MySQL siguen las mismas reglas para los nombres de usuario que aparecen en las declaraciones SQL, ligeramente diferentes en la sintaxis SQL para asignar contraseñas y ligeramente diferentes en el soporte de declaraciones SQL para el bloqueo de usuarios.
En términos de administración de permisos, las declaraciones de autorización y la sintaxis de OceanBase y MySQL son consistentes. Ambas bases de datos tienen sus propias tablas de autorización únicas. OceanBase no admite permisos dinámicos y revocación parcial de permisos globales por el momento.
En términos de gestión de funciones y funciones de permisos de nivel de fila, OceanBase no es compatible con el modo de inquilino de MySQL, pero puede admitir el modo de inquilino de Oracle.
Vale la pena mencionar que OceanBase también proporciona una función de lista blanca de inquilinos para controlar los clientes que pueden iniciar sesión.
Acerca de SQLE
El SQLE de la comunidad de código abierto de Akson es una herramienta de auditoría de SQL para usuarios y administradores de bases de datos, que admite la auditoría de escenarios múltiples, admite procesos en línea estandarizados, admite de forma nativa la auditoría de MySQL y tiene tipos de bases de datos escalables.
SQLE obtener
tipo | DIRECCIÓN |
---|---|
Repositorio | https://github.com/actiontech/sqle |
documento | https://actiontech.github.io/sqle-docs/ |
lanzamiento de noticias | https://github.com/actiontech/sqle/releases |
Documentación de desarrollo del complemento de auditoría de datos | https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html |