没有此操作的特权
No privilege for this operation
中提取的代码
create table sales_catalog(
item_id varchar(10) not null primary key,
item_name_desc varchar(50) not null,
item_desc varchar(50));
在 Firebird SQL3 中使用 SYSDBA
作为用户后出错。
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
CREATE TABLE SALES_CATALOG failed
There is no privilege for this operation.
我做了一些实验,问题似乎是如果你使用 ISQL 连接到数据库而不指定主机名,它将使用嵌入式 Firebird 连接到数据库(以前版本的 Firebird 没有这样做Windows).
Firebird embedded 不需要用户名和密码,因为它假定如果您可以直接 read/write 访问数据库,那么您就可以连接到它。
当您连接时未指定用户名和密码(例如,使用 connect 'database.fdb'
而不是 connect 'database.fdb' user sysdba
,Firebird embedded 将使用您的 OS 用户名进行连接。
这个可以查,因为连接时ISQL会报告用户名:
SQL> connect 'd:\data\db\fb3\dbofnormal.fdb';
Database: 'd:\data\db\fb3\dbofnormal.fdb', User: MARK
Firebird 3 添加了新的元数据权限,例如在数据库中创建 table 现在需要您是数据库的所有者(create database
语句中使用的用户名)、sysdba (或其他管理员用户),或者您拥有 create table 权限。另见 User Privileges for Metadata Changes。在早期版本中,任何用户在访问数据库后都可以创建 tables。
现在开始讨论问题:用户(在我的示例中 MARK
)没有创建 table 权限,因此尝试这样做会失败:
SQL> create table testmark ( id integer generated by default as identity primary key);
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-CREATE TABLE TESTMARK failed
-There is no privilege for this operation
有几种方法可以解决这个问题:
在connect语句中指定一个有足够权限的用户(如sysdba
):
connect 'database.fdb' user sysdba;
在连接语句中包含主机名以通过Firebird服务器而不是Firebird嵌入式连接,因此您需要指定用户名和密码:
connect 'localhost:database.fdb' user sysdba password 'masterkey';
以 sysdba
身份连接到您的数据库一次(见第一项),并为用户提供必要的权限(在我的例子中是 mark
):
grant create table to user mark;
从现在开始,此用户可以创建 table(您可能需要授予额外的权限,例如创建视图、创建过程等)。
create table sales_catalog(
item_id varchar(10) not null primary key,
item_name_desc varchar(50) not null,
item_desc varchar(50));
在 Firebird SQL3 中使用 SYSDBA
作为用户后出错。
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
CREATE TABLE SALES_CATALOG failed
There is no privilege for this operation.
我做了一些实验,问题似乎是如果你使用 ISQL 连接到数据库而不指定主机名,它将使用嵌入式 Firebird 连接到数据库(以前版本的 Firebird 没有这样做Windows).
Firebird embedded 不需要用户名和密码,因为它假定如果您可以直接 read/write 访问数据库,那么您就可以连接到它。
当您连接时未指定用户名和密码(例如,使用 connect 'database.fdb'
而不是 connect 'database.fdb' user sysdba
,Firebird embedded 将使用您的 OS 用户名进行连接。
这个可以查,因为连接时ISQL会报告用户名:
SQL> connect 'd:\data\db\fb3\dbofnormal.fdb';
Database: 'd:\data\db\fb3\dbofnormal.fdb', User: MARK
Firebird 3 添加了新的元数据权限,例如在数据库中创建 table 现在需要您是数据库的所有者(create database
语句中使用的用户名)、sysdba (或其他管理员用户),或者您拥有 create table 权限。另见 User Privileges for Metadata Changes。在早期版本中,任何用户在访问数据库后都可以创建 tables。
现在开始讨论问题:用户(在我的示例中 MARK
)没有创建 table 权限,因此尝试这样做会失败:
SQL> create table testmark ( id integer generated by default as identity primary key);
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-CREATE TABLE TESTMARK failed
-There is no privilege for this operation
有几种方法可以解决这个问题:
在connect语句中指定一个有足够权限的用户(如
sysdba
):connect 'database.fdb' user sysdba;
在连接语句中包含主机名以通过Firebird服务器而不是Firebird嵌入式连接,因此您需要指定用户名和密码:
connect 'localhost:database.fdb' user sysdba password 'masterkey';
以
sysdba
身份连接到您的数据库一次(见第一项),并为用户提供必要的权限(在我的例子中是mark
):grant create table to user mark;
从现在开始,此用户可以创建 table(您可能需要授予额外的权限,例如创建视图、创建过程等)。