[firebase-br] Alter User PASSWORD 'xptyDb123'

Mário Reis mariodosreyx em gmail.com
Seg Jan 20 13:13:30 -03 2014


Olá boa gente,

Ou eu não entendo nada do leio ou qualquer coisa vai mal com o FB2.5 já que 
nos outros que conheço, o ultimo que useio PostgreSql basta, um simples
sqlScript com um "ALTER USER XPTO WITH PASSWORD 'xptydb123' ", enquanto que
no Fb2.5 é preciso dar uma volta e tanto, como demonstra o exemplo abaixo:
CREATE OR ALTER PROCEDURE SP$USER_MANAGER (
I$CMD_DDL_USER VARCHAR(255),
I$USER_ADMIN TYPE OF COLUMN TB$USUARIO.NOME = 'ADM',
I$PASSWORD TYPE OF COLUMN TB$USUARIO.SENHA = 'senha',
I$ROLE_ADMIN VARCHAR(30) = 'RDB$ADMIN'
)
AS
BEGIN
EXECUTE STATEMENT I$CMD_DDL_USER
WITH COMMON TRANSACTION
AS USER :I$USER_ADMIN PASSWORD :I$PASSWORD ROLE :I$ROLE_ADMIN;
END

É necessário que o usuário passado como parâmetro de entrada para a 
procedure acima seja um "super usuário" com direitos 
equiparados ao SYSDBA, 
portanto estou utilizando um usuário que é membro da role Rdb$admin 
- que 
também é um novo recurso da versão 2.5.
CREATE USER ADM
PASSWORD 'senha'
FIRSTNAME 'Administrador'
MIDDLENAME 'do Sistema'
LASTNAME 'QualquerUm'
GRANT ADMIN ROLE

Além disso, é necessário atribuir (em cada base de dados) a role 
rdb$admin ao usuário, assim:

GRANT RDB$ADMIN TO ADM

O Trigger abaixo é responsável por inserir, alterar e excluir o 
usuário no 
banco de dados Security2.fdb, condicional ao evento gerado na tabela 
TB$USUARIO.
CREATE OR ALTER TRIGGER TRI$USER_MANAGER FOR TB$USUARIO
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
BEGIN
IF (INSERTING) THEN
EXECUTE PROCEDURE SP$USER_MANAGER('CREATE USER ' || NEW.NOME ||
' PASSWORD ''' || NEW.SENHA || ''' ', 'ADM', 'senha');
ELSE
IF (UPDATING) THEN
EXECUTE PROCEDURE SP$USER_MANAGER('ALTER USER ' || OLD.NOME ||
' PASSWORD ''' || NEW.SENHA || ''' ', 'ADM', 'senha');
ELSE
EXECUTE PROCEDURE SP$USER_MANAGER('DROP USER ' || OLD.NOME,
'ADM', 'senha');
END
Ou esquema identico ao exemplo supra, adptado e executado a partir de um 
cliente em Delphi ou C++.
Depois não crie nunca um user "ADMIN", pois embora o systema aceite, 
também são só problemas. Crie qualquer outro menos "ADMIN" e em 
maiúsculas, sempre.

É que, tanto quanto pude observar, mesmo o próprio para alterar a sua 
própria password sem problemas, tem de seguir o esquema supra com:

Alter user MyUser Password 'xyzptb123' WITH COMMON TRANSACTION
AS USER ADM PASSWORD 'senha' ROLE 'RDB$ADMIN'. Se cortar o WITH COMMON... 
são só problemas!!!

Alguém me pode esclarecer, sobre o que estou a ver mal? 
Indicar algum lnk esclarecedor que os que vi afora o do exemplo 
supra são 
todos muito obscuros.
Obrigado

 Mário





Mais detalhes sobre a lista de discussão lista