使用 isql-fb 在 Firebird 3 中创建用户失败

Create user fails in Firebird 3 with isql-fb

我正在尝试在 firebird 3 数据库(在 Fedora 27 上)中创建一个用户。当我使用角色 RDB$ADMIN 使用 isql-fb 连接到我的数据库时,我无法创建新用户。

[user@host]$ isql-fb -z
ISQL Version: LI-V3.0.3.32900 Firebird 3.0
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect localhost:mydb user myuser password 'mypassword' role RDB$ADMIN;
Server version:
LI-V3.0.3.32900 Firebird 3.0
LI-V3.0.3.32900 Firebird 3.0/tcp (host)/P15:C
LI-V3.0.3.32900 Firebird 3.0/tcp (host)/P15:C
Database: localhost:mydb , User: MYUSER
SQL> create user NEWUSER password 'dasgfsdfdasf';
Statement failed, SQLSTATE = 28000
add record error
-no permission for INSERT access to TABLE PLG$SRP_VIEW

我确信用户 myuser 已被授予管理员角色。事实上,如果我连接到 security3.fdb 数据库,我就能看到这个。

SQL> connect /home/firebird/secdb/security3.fdb user sysdba password 'myseeeecritpassword';
SQL> show grants;
/* Grant permissions for this database */
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON PLG$SRP TO VIEW PLG$SRP_VIEW
GRANT SELECT, UPDATE (PLG$ATTRIBUTES) ON PLG$SRP_VIEW TO PUBLIC
GRANT UPDATE (PLG$COMMENT) ON PLG$SRP_VIEW TO PUBLIC
GRANT UPDATE (PLG$FIRST) ON PLG$SRP_VIEW TO PUBLIC
GRANT UPDATE (PLG$LAST) ON PLG$SRP_VIEW TO PUBLIC
GRANT UPDATE (PLG$MIDDLE) ON PLG$SRP_VIEW TO PUBLIC
GRANT UPDATE (PLG$SALT) ON PLG$SRP_VIEW TO PUBLIC
GRANT UPDATE (PLG$VERIFIER) ON PLG$SRP_VIEW TO PUBLIC
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON PLG$USERS TO VIEW PLG$VIEW_USERS
GRANT SELECT, UPDATE (PLG$FIRST_NAME) ON PLG$VIEW_USERS TO PUBLIC
GRANT UPDATE (PLG$GID) ON PLG$VIEW_USERS TO PUBLIC
GRANT UPDATE (PLG$GROUP_NAME) ON PLG$VIEW_USERS TO PUBLIC
GRANT UPDATE (PLG$LAST_NAME) ON PLG$VIEW_USERS TO PUBLIC
GRANT UPDATE (PLG$MIDDLE_NAME) ON PLG$VIEW_USERS TO PUBLIC
GRANT UPDATE (PLG$PASSWD) ON PLG$VIEW_USERS TO PUBLIC
GRANT UPDATE (PLG$UID) ON PLG$VIEW_USERS TO PUBLIC
GRANT RDB$ADMIN TO SYSDBA
GRANT RDB$ADMIN TO MYUSER
GRANT CREATE DATABASE TO USER MYUSER

我需要做什么才能为 MYUSER 帐户授予适当的权限,以便我可以创建用户?

Firebird 有两个级别的管理员角色:

  1. 在普通用户数据库中。这允许您在该数据库中执行所有操作(创建对象、授予或撤销用户权限等)
  2. 在安全数据库中。这允许您创建或更改用户并授予或撤销某些全局权限,例如 'create database',以及用户管理(创建、更改或删除用户)。

在普通数据库中拥有管理员角色不足以创建、更改或删除用户(除非普通数据库也用作安全数据库)。您还需要在安全数据库中具有管理员角色才能创建或更改用户。

要授予用户在安全数据库中的管理员角色,在安全数据库中具有管理员权限的用户需要执行以下语句(使用 RDB$ADMIN 角色连接时):

alter user MYUSER grant admin role

或在创建用户时

create user MYUSER password 'somepassword' grant admin role

在安全数据库中具有管理员角色的用户只能在连接到具有 RDB$ADMIN 角色的普通数据库时使用该角色,并且必要时需要具有 RDB$ADMIN 角色那个普通数据库也是如此。

在普通数据库中授予 RDB$ADMIN 角色是使用

完成的
grant role RDB$ADMIN to MYUSER

此角色仅适用于该数据库。

在 Firebird 4 中,最后一项要求将被删除,安全数据库中的管理员不再需要是当前数据库中的管理员才能创建、更改或删除用户帐户。