Firebird在特定目录中创建数据库

时间:2013-10-16 18:49:51

标签: python database linux ubuntu firebird

我希望能够在特定目录中创建firebird数据库。我知道firebird用户需要对我想要创建db的目录具有r / w / x权限。我创建了一个名为“tracker”的组,我将我的用户和firebird用户添加到该组中。

firebird@ubuntu:/$ groups firebird
firebird tracker

我创建了一个名为“tracker”的主目录

drwxrwx---   3 me tracker  4096 Oct 16 10:40 tracker

在'tracker'目录中,我创建了一个'fdb'目录,我希望在其中创建firebird DB。

drwxrwx--- 2 firebird firebird 4096 Oct 16 11:35 fdb

现在,当我尝试使用以下命令创建数据库时:

CREATE DATABASE 'localhost:/tracker/fdb/test.fdb' page_size 8192 user 'SYSDBA' password 'foobar' DEFAULT CHARACTER SET UTF8;

我收到以下错误:

Statement failed, SQLSTATE = 08001
I/O error during "open O_CREAT" operation for file "/tracker/fdb/test.fdb"
-Error while trying to create file
-Permission denied

如果更改'tracker'目录以属于'firebird'组,那么它会创建数据库,这是有道理的,但由于firebird用户属于'tracker'组,因此它不应该有任何权限问题

我在这里想念的是什么?

我正在使用Ubuntu和firebird 2.5。

由于

1 个答案:

答案 0 :(得分:1)

我不经常使用Linux,但如果你为更高级别目录中的每个人添加执行位,那么你的评论是有用的,这让我再想一想。

Firebird服务器正在运行 - 可能是在 firebird 用户下运行。在您的示例设置中,此用户可以访问/tracker/fdb文件夹,但无法访问/tracker文件夹。

为了能够访问/tracker/fdb(例如创建文件),用户需要在根目录下的所有更高级别目录上拥有eXecute权限(否则 firebird 用户无法知道(或检查)fdb文件夹甚至存在于/tracker)内。

另见Unix File Permissions

  

r w和x对目录的意义何在?

     

目录也是一个文件,“读取”权限意味着你可以阅读它。但是如果没有x权限,你真的不能做很多事情。对于目录,您通常同时具有读取和执行权限。在目录上,该x被正式称为“搜索权限”。您需要x才能使用路径名中的目录。因此,如果您尝试“cat / etc / passwd”,则需要x on /和/ etc。您还需要x才能进入目录。假设您已对目录执行了读取但未获得搜索(x)权限。你能做什么?不多。您可以使用“ls”查看文件名。即使是“ls -l”也行不通。没有搜索权限的读访问权限不是很有用。这仍然比仅对目录具有写权限更好......这完全没用。我没有看到明确说明这一点的任何其他文档,所以让我重复一遍:写入但没有对目录的执行权限根本没有授予任何内容。假设您具有搜索(x)权限但对目录没有读取权限。现在,如果您碰巧知道文件的名称,则可以打开目录中的文件。你可以进入目录。就是这样。您甚至无法创建新文件。添加写入权限将允许您创建文件。如果你碰巧知道他们的名字,你就可以删除文件。