Informix-创建表时的默认权限

时间:2018-08-16 23:09:25

标签: database informix

因此,我使用Informix DB引擎来创建数据库。我已经注意到一些奇怪的东西,但是我在IBM官方页面上找不到有关的信息。

如果您检查表的定义,则最后一行会显示:

revoke all on "gabriel.barrios".proveedores from "public" as "gabriel.barrios";

我没有写这个,我只是定义了表属性。但这似乎是引擎本身在增加的。

是这样吗?

如果是的话,我该如何处理这种默认行为。

另外,有人可以澄清该行的输出:

{ TABLE "gabriel.barrios".proveedores row size = 110 number of columns = 4 index size = 9 }

[gabriel.barrios@informix1 ~]$ dbschema -d practico_matias_barrios  -t Proveedores

DBSCHEMA Schema Utility       INFORMIX-SQL Version 11.70.UC8W1

{ TABLE "gabriel.barrios".proveedores row size = 110 number of columns = 4 index size = 9 }

create table "gabriel.barrios".proveedores
  (
    id serial not null ,
    nombre varchar(50) not null constraint "gabriel.barrios".proveedor_nombre_vacio,
    situacion integer not null constraint "gabriel.barrios".proveedor_situacion_vacio,
    ciudad varchar(50) not null constraint "gabriel.barrios".proveedor_ciudad_vacio,
    primary key (id)  constraint "gabriel.barrios".proveedor_clave_primaria
  );

revoke all on "gabriel.barrios".proveedores from "public" as "gabriel.barrios";

1 个答案:

答案 0 :(得分:2)

Informix的默认行为是向PUBLIC角色授予特权。

根据文档(Table-level privileges):

  

在符合ANSI的数据库中,只有表所有者具有任何   特权。在其他数据库中,数据库服务器作为   创建一个表,自动授予 PUBLIC 所有表特权   除了Alter和References之外,除非 NODEFDAC 环境变量   已设置为“是”以从 PUBLIC 保留所有表特权。   当您允许数据​​库服务器自动授予所有表时    PUBLIC 的权限,任何用户都可以访问新创建的表   具有“连接”权限。如果这不是您想要的(如果用户   具有“连接”权限的用户,该用户应无法访问此权限   表),则必须在 PUBLIC 之后撤消对表的所有特权   您创建表格。

您看到的是dbschema总是在创建表输出上从PUBLIC撤消特权,然后将它们重新添加到特权输出上。

$ dbschema -d mydatabase -t default_privileges 

DBSCHEMA Schema Utility       INFORMIX-SQL Version 12.10.FC12

{ TABLE "myuser".default_privileges row size = 4 number of columns = 1 index size = 0 }

create table "myuser".default_privileges
  (
    id integer
  );

revoke all on "myuser".default_privileges from "public" as "myuser";

使用dbschema特权输出并按表default_privileges进行过滤:

$ dbschema -d mydatabase -p all | grep default_privileges

grant select on "myuser".default_privileges to "public" as "myuser";
grant update on "myuser".default_privileges to "public" as "myuser";
grant insert on "myuser".default_privileges to "public" as "myuser";
grant delete on "myuser".default_privileges to "public" as "myuser";
grant index on "myuser".default_privileges to "public" as "myuser";