服务器 频道

Informix的用户权限管理

    解除用户相应的数据库级别的权限的格式是:
    REVOKE 权限 FROM 用户名[,用户名]
    对于拥有DBA、RESOURCE权限的用户,解除其相应的DBA、RESOURCE权限将自动将其降格为CONNECT权限。
    而对于只拥有CONNECT权限的用户,解除其CONNECT权限实际上也就意味着删除该数据库用户。
    示例:
    REVOKE DBA FROM mydba;/*将mydba降格为CONNECT权限*/
    REVOKE CONNECT FROM myuser1;/*解除myuser1对该数据库的访问权限*/

表级别和字段级别的权限

    当一个用户访问数据库时,DBA可以限制其对指定表和表中指定字段的访问。任何resource级别或DBA级别的用户都可以创建表。表的拥有者或任何DBA级别的用户都可以对其它用户赋予或解除针对该数据表的表级别和字段级别的权限。这样的权限共有八种:insert、delete、select、update、references、index、alter和all。

    Insert

    该权限表示用户可以向表中增添新的数据。

    Delete

    该权限表示用户可以删除表中的数据。

    Select

    该权限可以扩展到指定字段,表示用户可以查询表中的记录或指定字段。

    Update

    该权限可以扩展到指定字段,表示用户可以修改表中的记录或指定字段。

    References

    该权限可以扩展到指定字段,表示用户可以针对表中的记录或指定字段制定参考性约束条件。参考性约束条件用来执行诸如多级删除和字段之间关联的工作。赋予该权限的用户应该首先至少是resource级别的用户。

    Index

    该权限表示用户可以建立或删除与表有关的索引。赋予该权限的用户应该首先至少是resource级别的用户。一个connect级别的用户即使被赋予该权限也不能建立索引。该权限不能扩展到指定字段,这是因为索引是建立在表的所有行的基础上的。

    Alter

    该权限表示用户可以改变表的结构。所谓改变表的结构是指增加、删除和改变字段或改变字段的数据类型。该权限只能针对数据表。一般来说,只有对于具备数据库系统知识并知道如何保护数据库系统的人,我们才会赋予此项权限。

    All

    该权限包含上面的所有七种权限。

创建新表

    使用mydba登录到数据库,并使用如下语句创建一个新的数据表:
    CREATE TABLE customer_table (
       customer_id char(2) not null,
       balance decimal(16, 2) not null,
       primary key(customer_id));
   
   创建新表后,系统将对public赋予该表All的权限。也就是说所有可以访问该数据库的用户都可以对该表执行select、insert、update和delete语句,这显然不是我们想要看到的。

用户表级别和字段级别权限的解除

    解除用户相应的数据库级别的权限的格式是:
    REVOKE 权限[,权限] [(字段名[,字段名])] ON 表名 FROM 用户名[,用户名]
    我们首先需要解除public在该表上的All权限:
    REVOKE ALL ON customer_table FROM PUBLIC;
    其它示例:
    REVOKE INSERT ON customer_table FROM PUBLIC;/*解除所有用户对该表的INSERT权限*/
    REVOKE SELECT ON customer_table FROM myuser1;/*解除myuser1对该表的SELECT权限*/
    REVOKE UPDATE (customer_id, balance)
       ON customer_table FROM myuser1;/*解除myuser1对该表中customer_id, balance字段的UPDATE权限*/

用户表级别和字段级别权限的赋予

    赋予用户相应的数据库级别的权限的格式是:
    GRANT 权限[,权限] [(字段名[,字段名])] ON 表名 TO 用户名[,用户名]
    我们赋予myuser1以更改该表中balance字段的权限:
    GRANT UPDATE (balance) ON customer_table TO myuser1;
    赋予myuser2以浏览该表的权限:
    GRANT SELECT ON customer_table TO myuser2;

 

0
相关文章