首页 > 解决方案 > 使用 isql-fb 在 Firebird 3 中创建用户失败

问题描述

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

[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 帐户的适当权限,以便我可以创建用户?

标签: firebirdisqlfirebird-3.0

解决方案


Firebird 在两个级别上具有管理员角色:

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

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

要授予用户在安全数据库中的管理员角色,在安全数据库中具有管理员权限的用户需要执行以下语句(使用该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 中,最后一个要求将被删除,安全数据库中的管理员不再需要是当前数据库中的管理员才能创建、更改或删除用户帐户。


推荐阅读