Esta página fue traducida automáticamente. Lee el original en inglés. English

Extensión del Lenguaje SQL: CREATE/ALTER/CREATE_OR_ALTER/DROP USER

Implementa la capacidad de gestionar usuarios desde una conexión regular a la base de datos.

Autor:

Alex Peshkoff [email protected]

La sintaxis es:

CREATE USER name [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER CURRENT USER [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] CREATE OR ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] DROP USER name [ USING PLUGIN name ];

donde OPTIONS es una lista de las siguientes opciones:

- PASSWORD ‘password’

- FIRSTNAME ‘firstname’

- MIDDLENAME ‘middlename’

- LASTNAME ’lastname'

- ACTIVE

- INACTIVE

- USING PLUGIN name

y cada TAG puede tener una de dos formas:

name = ‘string value’

o:

DROP name

donde NAME es cualquier identificador SQL válido.

Descripción:

Permite añadir, modificar y eliminar usuarios en la base de datos de seguridad utilizando el lenguaje SQL.

Firebird desde la versión 3.0 soporta múltiples bases de datos de seguridad. La utilidad gsec y la API de servicios

no lo soportan y su uso para gestionar usuarios está en desuso.

Las cláusulas CREATE y DROP están disponibles solo para SYSDBA (u otro usuario con el rol RDB$ADMIN concedido en la base de datos de seguridad). Un usuario ordinario puede ALTER su propia contraseña, nombres amplios y etiquetas. El intento de modificar

a otro usuario fallará. También fallará el intento de ponerse a sí mismo como inactivo o activo. Para evitar escribir su nombre cada vez, existe la forma simplificada ALTER CURRENT USER.

Al menos una de las opciones PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE o TAGS debe estar presente en la sentencia ALTER USER. También tenga en cuenta que la cláusula PASSWORD es obligatoria al crear un nuevo usuario.

La cláusula PASSWORD es bastante autodescriptiva. Las cláusulas FIRSTNAME, MIDDLENAME y LASTNAME también, pero pueden usarse para almacenar cualquier información breve sobre un usuario. Las cláusulas INACTIVE/ACTIVE se utilizan para deshabilitar el inicio de sesión del usuario en el servidor sin eliminarlo de la lista y para restaurar esa capacidad. La cláusula USING PLUGIN permite trabajar con usuarios no solo con el plugin de gestión predeterminado (el primero listado en el parámetro UserManager en firebird.conf) sino también con otros. La utilidad gsec y la API de servicios no soportan múltiples plugins de gestión de usuarios: siempre se usa el predeterminado.

TAGS es una lista de atributos definidos por el usuario final. La longitud del valor no debe exceder los 255 bytes.

Asignar un valor a un nombre establece una nueva etiqueta o modifica una existente. Para eliminar la etiqueta use la opción DROP.

Al establecer una lista de etiquetas para el usuario, se conservan las etiquetas establecidas anteriormente si no se mencionan en ese momento.

Nota: UID/GID, introducidos por la obsoleta gsec, se tratan como etiquetas en la interfaz SQL.

Para acceder a la lista de usuarios, seleccione de las tablas virtuales SEC$USERS y SEC$USER_ATTRIBUTES.

Ejemplos (suponga UserManager=Srp,Legacy_UserManager en firebird.conf):

Genérico:

CREATE USER alex PASSWORD 'test'; ALTER USER alex SET FIRSTNAME 'Alex' LASTNAME 'Peshkoff'; CREATE OR ALTER USER alex SET PASSWORD 'IdQfA'; DROP USER alex; ALTER CURRENT USER SET PASSWORD 'SomethingLongEnough' USING PLUGIN srp;

Trabajando con etiquetas:

ALTER USER alex SET TAGS (a='a', b='b'); NAME VALUE ================ ============================== A a B b ALTER USER alex SET TAGS (b='x', c='d'); NAME VALUE ================ ============================== A a B x C d ALTER USER alex SET TAGS (drop a, c='sample'); NAME VALUE ================ ============================== B x C sample

Mostrando la lista de usuarios:

SELECT CAST(U.SEC$USER_NAME AS CHAR(20)) LOGIN, CAST(A.SEC$KEY AS CHAR(10)) TAG, CAST(A.SEC$VALUE AS CHAR(20)) "VALUE", U.SEC$PLUGIN "PLUGIN" FROM SEC$USERS U LEFT JOIN SEC$USER_ATTRIBUTES A ON U.SEC$USER_NAME = A.SEC$USER_NAME AND U.SEC$PLUGIN = A.SEC$PLUGIN;

LOGIN TAG VALUE PLUGIN

==================== ========== ==================== =============================== SYSDBA <null> <null> Srp ALEX B x Srp ALEX C sample Srp SYSDBA <null> <null> Legacy_UserManager

¡Nota!

Esta funcionalidad depende en gran medida del plugin de gestión de usuarios. Tenga en cuenta que algunas opciones se ignoran al usar el plugin de gestión de usuarios heredado.