firebird - 使用 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 帐户的适当权限,以便我可以创建用户?
解决方案
Firebird 在两个级别上具有管理员角色:
- 在普通用户数据库中。这允许您在该数据库中执行所有操作(创建对象、授予或撤销用户权限等)
- 在安全数据库中。这允许您创建或更改用户并授予或撤销某些全局权限,如“创建数据库”,以及用户管理(创建、更改或删除用户)。
在普通数据库中拥有管理员角色不足以创建、更改或删除用户(除非普通数据库也用作安全数据库)。您还需要在安全数据库中拥有管理员角色才能创建或更改用户。
要授予用户在安全数据库中的管理员角色,在安全数据库中具有管理员权限的用户需要执行以下语句(使用该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 中,最后一个要求将被删除,安全数据库中的管理员不再需要是当前数据库中的管理员才能创建、更改或删除用户帐户。
推荐阅读
- python - 有没有办法使用 django-filter 和 location 外键从 city-light 为 City 制作下拉复选框
- wordpress - 有没有办法使用 WPBakery 在主页上显示独特的文章?
- php - Symfony 4 - 内置网络服务器 - 忽略路由过程中的一些路径
- c# - C# Entity Framework 包括具有 include() 性能糟糕的邻居表
- java - Spring Boot 中的 Maven 依赖问题
- sql - 如何在 Oracle 选择语句中声明变量
- sql-server - 在另一个查询中使用来自一个查询的参数
- php - 为什么 HTML 电子邮件只是在 php 中显示代码
- ruby - 无法在 macOS Mojave 10.14.2 中使用 RVM 安装任何 ruby 版本
- .net - 面板中的控件被隐藏,直到我调整窗口大小