以只读方式连接到 Firebird 数据库
Connect to Firebird database as read-only
我想以只读方式连接到 Firebird 数据库(因为 .fdb
所在的位置对于我的应用程序是只读的。
我是这样连接的:
conn = fdb.connect(dsn="/path/to.fdb", user='****', password='****', charset='iso8859_1')
我得到的错误是:
Error while connecting to database:\n- SQLCODE: -551\n- no permission for read-write access to database /path/to.fdb', -551, 335544352
我正在使用 FDB v2.0。我在在线文档中找不到任何关于只读连接的信息。
或许为具有特定角色的数据库创建用户并在进一步连接期间使用该角色是个好主意。像这样:
$ isql firstdb.fdb -user SYSDBA -password masterkey
Database: firstdb.fdb, User: SYSDBA
SQL> CREATE ROLE firstdbadmin;
SQL> GRANT SELECT, UPDATE, INSERT, DELETE ON sales_catalog
CON> TO ROLE firstdbadmin;
SQL> GRANT firstdbadmin TO TestAdmin;
SQL> quit;
很遗憾,您想要的是不可能的。 Firebird 没有只读连接的概念。每个连接都需要能够在数据库中写入信息以管理事务(这甚至适用于只读事务)。
唯一的例外是标记为 read-only database using gfix 的数据库。在这种情况下,事务搭载在最后提交的事务 ID 上。但是,将数据库标记为只读将使它对所有连接都是只读的。
如果您的应用程序需要只读访问权限,而其他应用程序需要对同一数据库的写入访问权限,唯一的解决方案是使用 Firebird 服务器*,并使用用户(和角色)分配足够的权限以便能够读取但不写入数据库。
*:Firebird Embedded 可能就足够了,但由于用户随后需要 read/write 访问数据库,因此绕过这种形式的恶意行为者访问控制会更简单。
我想以只读方式连接到 Firebird 数据库(因为 .fdb
所在的位置对于我的应用程序是只读的。
我是这样连接的:
conn = fdb.connect(dsn="/path/to.fdb", user='****', password='****', charset='iso8859_1')
我得到的错误是:
Error while connecting to database:\n- SQLCODE: -551\n- no permission for read-write access to database /path/to.fdb', -551, 335544352
我正在使用 FDB v2.0。我在在线文档中找不到任何关于只读连接的信息。
或许为具有特定角色的数据库创建用户并在进一步连接期间使用该角色是个好主意。像这样:
$ isql firstdb.fdb -user SYSDBA -password masterkey
Database: firstdb.fdb, User: SYSDBA
SQL> CREATE ROLE firstdbadmin;
SQL> GRANT SELECT, UPDATE, INSERT, DELETE ON sales_catalog
CON> TO ROLE firstdbadmin;
SQL> GRANT firstdbadmin TO TestAdmin;
SQL> quit;
很遗憾,您想要的是不可能的。 Firebird 没有只读连接的概念。每个连接都需要能够在数据库中写入信息以管理事务(这甚至适用于只读事务)。
唯一的例外是标记为 read-only database using gfix 的数据库。在这种情况下,事务搭载在最后提交的事务 ID 上。但是,将数据库标记为只读将使它对所有连接都是只读的。
如果您的应用程序需要只读访问权限,而其他应用程序需要对同一数据库的写入访问权限,唯一的解决方案是使用 Firebird 服务器*,并使用用户(和角色)分配足够的权限以便能够读取但不写入数据库。
*:Firebird Embedded 可能就足够了,但由于用户随后需要 read/write 访问数据库,因此绕过这种形式的恶意行为者访问控制会更简单。