Gerenciamento de Usuários no Firebird 3.0
Extensão da Linguagem SQL: CREATE/ALTER/CREATE_OR_ALTER/DROP USER
Implementa a capacidade de gerenciar usuários a partir de uma conexão regular com o banco de dados.
Autor:
Alex Peshkoff [email protected]
A sintaxe é:
CREATE USER nome [ opções ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER USER nome [ SET ] [ opções ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER CURRENT USER [ SET ] [ opções ] [ TAGS ( tag [, tag [, tag ...]] ) ] CREATE OR ALTER USER nome [ SET ] [ opções ] [ TAGS ( tag [, tag [, tag ...]] ) ] DROP USER nome [ USING PLUGIN nome ];
onde OPÇÕES é uma lista das seguintes opções:
- PASSWORD ‘senha’
- FIRSTNAME ‘primeiro_nome’
- MIDDLENAME ’nome_do_meio'
- LASTNAME ‘sobrenome’
- ACTIVE
- INACTIVE
- USING PLUGIN nome
e cada TAG pode ter uma das duas formas:
nome = ‘valor_de_string’
ou:
DROP nome
onde NOME é qualquer identificador SQL válido.
Descrição:
Torna possível adicionar, modificar e excluir usuários no banco de dados de segurança usando a linguagem SQL.
O Firebird desde a versão 3.0 suporta múltiplos bancos de dados de segurança. O utilitário gsec e a API de serviços
não suportam isso e o uso deles para gerenciar usuários está obsoleto.
As cláusulas CREATE e DROP estão disponíveis apenas para SYSDBA (ou outro usuário, com o papel RDB$ADMIN concedido no banco de dados de segurança). Um usuário comum pode ALTERAR sua própria senha, nomes completos e tags. A tentativa de modificar
outro usuário falhará. Também falhará a tentativa de tornar a si mesmo inativo ou ativo. Para evitar digitar seu nome toda vez, existe a forma simplificada ALTER CURRENT USER.
Pelo menos uma das opções PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE ou TAGS deve estar presente na instrução ALTER USER. Observe também que a cláusula PASSWORD é obrigatória ao criar um novo usuário.
A cláusula PASSWORD é bastante autoexplicativa. As cláusulas FIRSTNAME, MIDDLENAME e LASTNAME também, mas podem ser usadas para armazenar qualquer informação curta sobre um usuário. As cláusulas INACTIVE/ACTIVE são usadas para desabilitar o login do usuário no servidor sem removê-lo da lista e para restaurar essa capacidade. A cláusula USING PLUGIN torna possível trabalhar com usuários não apenas com o plugin de gerenciamento padrão (o primeiro listado no parâmetro UserManager no firebird.conf), mas também com outros. O utilitário gsec e a API de serviços não suportam múltiplos plugins de gerenciamento de usuários - o padrão é sempre usado.
TAGS é uma lista de atributos definidos pelo usuário final. O comprimento do valor não deve exceder 255 bytes.
Atribuir um valor a um nome define uma nova tag ou modifica uma existente. Para remover a tag, use a opção DROP.
Definir uma lista de tags para o usuário mantém as tags definidas anteriormente se elas não forem mencionadas no momento.
Observação - UID/GID, inseridos pelo gsec obsoleto, são tratados como tags na interface SQL.
Para acessar a lista de usuários, selecione das tabelas virtuais SEC$USERS e SEC$USER_ATTRIBUTES.
Exemplos (suponha UserManager=Srp,Legacy_UserManager no 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;
Trabalhando com tags:
ALTER USER alex SET TAGS (a='a', b='b'); NOME VALOR ================ ============================== A a B b ALTER USER alex SET TAGS (b='x', c='d'); NOME VALOR ================ ============================== A a B x C d ALTER USER alex SET TAGS (drop a, c='sample'); NOME VALOR ================ ============================== B x C sample
Exibindo a lista de usuários:
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)) "VALOR", 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 VALOR PLUGIN
==================== ========== ==================== =============================== SYSDBA <null> <null> Srp ALEX B x Srp ALEX C sample Srp SYSDBA <null> <null> Legacy_UserManager
Atenção!
Este recurso depende fortemente do plugin de gerenciamento de usuários. Leve em consideração que algumas opções são ignoradas ao usar o plugin de gerenciamento de usuários legado.