Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以只读方式连接到Firebird数据库_Python_Firebird_Fdb - Fatal编程技术网

Python 以只读方式连接到Firebird数据库

Python 以只读方式连接到Firebird数据库,python,firebird,fdb,Python,Firebird,Fdb,我想以只读方式连接Firebird数据库(因为.fdb的位置对于我的应用程序是只读的 我是这样连接的: conn = fdb.connect(dsn="/path/to.fdb", user='****', password='****', charset='iso8859_1') $ isql firstdb.fdb -user SYSDBA -password masterkey Database: firstdb.fdb, User: SYSDBA SQL> CREATE ROL

我想以只读方式连接Firebird数据库(因为
.fdb
的位置对于我的应用程序是只读的

我是这样连接的:

conn = fdb.connect(dsn="/path/to.fdb", user='****', password='****', charset='iso8859_1')
$ 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;
我得到的错误是:

连接到数据库时出错:\n-SQLCODE:-551\n-没有对数据库/path/to.fdb'的读写访问权限,-551,335544352


我使用的是FDB v2.0。在联机文档中找不到任何关于只读连接的信息。

也许最好为数据库创建一个具有特定角色的用户,并在以后的连接过程中使用此角色。类似以下内容:

conn = fdb.connect(dsn="/path/to.fdb", user='****', password='****', charset='iso8859_1')
$ 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没有只读连接的概念。每个连接都需要能够在数据库中写入信息以管理事务(这甚至适用于只读事务)

唯一的例外是已标记为的数据库。在这种情况下,事务将基于上次提交的事务id。但是,将数据库标记为只读将使其对所有连接都是只读的

如果您的应用程序需要只读访问,而其他应用程序需要对同一数据库进行写访问,则唯一的解决方案是使用Firebird server*,并使用用户(和角色)分配足够的权限,以便能够对数据库进行读写操作



*:Firebird Embedded可能就足够了,但由于用户需要对数据库进行读/写访问,因此绕过这种形式的对恶意参与者的访问控制会更简单。

您是否通过Firebird服务器连接(如果没有,为什么没有),是否具有读/写访问权限?是否需要为每个人或仅此应用程序设置只读数据库?不需要通过服务器(因为设置起来很麻烦,而且以前也可以这样做)。仅此应用程序需要只读数据库。