尝试创建文件时发生Firebird错误,权限被拒绝

sai*_*vel 5 firebird firebird2.5

我正在尝试通过Flamerobin在主目录中创建Firebird数据库,但是我总是得到

*** IBPP::SQLException ***
Context: Database::Create
Message: isc_dsql_execute_immediate failed

SQL Message : -902
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements

Engine Code    : 335544344
Engine Message :
I/O error during "open O_CREAT" operation for file "/home/user/test.fdb"
Error while trying to create file
Permission denied
Run Code Online (Sandbox Code Playgroud)

即使文件是chmod 777,文件/etc/firebird/2.5/firebird.conf也已修改为:

DatabaseAccess = Full
Run Code Online (Sandbox Code Playgroud)

设置为允许访问所有文件。服务正在运行:

$ ps ax | grep fireb
 3909 ?        S      0:00 /usr/sbin/fbguard -daemon -forever -pidfile /var/run/firebird/2.5/fbserver.pid
Run Code Online (Sandbox Code Playgroud)

即使奇怪的是netstat找不到连接端口:

netstat | grep 3050
Run Code Online (Sandbox Code Playgroud)

并返回空列表。

如果我连接到现有数据库,则所有工作正常,例如连接到

/var/lib/firebird/2.5/system/help.fdb
Run Code Online (Sandbox Code Playgroud)

正确显示表格。

Mar*_*eel 5

我看到两个可能的原因:

  1. 您提到该文件是 chmod 777,这意味着该文件已经存在,因此创建新数据库将失败。

  2. 您正在尝试通过 Firebird 服务器创建(或连接)到用户文件夹(我假设是您的)中的文件(尽管没有服务器运行的事实可能表明情况并非如此)。

我假设 Firebird 服务器不是在您的帐户下运行(而是在 firebird 用户下运行),因此不允许访问您文件夹中的文件。

您需要在 Firebird 用户具有足够访问权限的位置创建(或访问)数据库,或者使用本地(嵌入式)连接(尽管我不确定flamerobin 是否支持)。


小智 5

你必须做一些事情......首先,让我们看看安全方面的东西......

在文件中 /etc/firebird/2.5/firebird.conf

部分:DatabaseAccess 它必须是这样的:

DatabaseAccess Restrict /the/directory/you/want/to/put/the/database
Run Code Online (Sandbox Code Playgroud)

现在,在文件中 /etc/firebird/2.5/aliases.conf

你把一个别名和目录...

diryouwant = /the/directory/you/want/to/put/the/database/database.fdb
Run Code Online (Sandbox Code Playgroud)

保存并重新启动 firebird 服务,如:

sudo service firebird-2.5"theversionyouhave" restart
Run Code Online (Sandbox Code Playgroud)

您必须像这样更改目录所有者:

sudo chown firebird.firebird /the/directory/you/want/to/put/the/database
Run Code Online (Sandbox Code Playgroud)

现在你可以毫无困难地使用弗拉罗宾了......