Comprenda la gestión de usuarios y el control de acceso de OceanBase en un artículo

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 ( sysinquilino) 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 passwordes ligeramente diferente.
  • La instrucción MySQL alter useradmite user()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 mysqladminmodificar 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 TOdeclaraciones (desde MySQL 8.0.23) o CHANGE MASTER TOdeclaraciones (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 USERel 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_useren 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.useren la tabla .account_locked

Resultados de la prueba:

  • OceanBase: ALTER USERadmite el bloqueo de usuarios, CREATE USERno admite el bloqueo de usuarios.
  • MySQL: ALTER USERy CREATE USERambos 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:

  1. Permisos administrativos: Permisos que pueden afectar a todo el inquilino, como: modificar la configuración del sistema, acceder a todas las tablas, etc.
  2. 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.
  3. 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:

  1. 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.

  2. 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.

  3. 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

  1. Los niveles de permiso de usuario se dividen en tres niveles y los significados expresados ​​son consistentes.
  2. 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.
  3. Varios permisos exclusivos de OceanBase: ALTER TENANT, ALTER SYSTEM, CREATE RESOURCE POOL, CREATE RESOURCE UNIT.
  4. OceanBase actualmente no admite permisos dinámicos para MySQL.

2.2 Declaración de autorización

  1. Autorizar GRANT
  2. revocar autorización REVOCAR
  3. Delegación de autorización CON OPCIÓN DE CONCESIÓN
  4. 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_nodesLa 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

Supongo que te gusta

Origin blog.csdn.net/ActionTech/article/details/131420243
Recomendado
Clasificación