1、linux创建用户组和用户
DB2没有数据库级别的用户,只能使用操作系统级别的用户;所以要新建DB2用户,要先在数据库服务器上新建操作系统用户
groupadd zhangsan
useradd -d /home/zhangsan -g zhangsan -m zhangsan
passwd zhangsan 给新建用户设置密码
2、切换DB2默认用户并授权
su - db2inst1
db2 connect to DBTEST
db2 grant connect on database to user zhangsan
授予新用户查询数据库表的权限
db2 grant select on table ODS.NC_TAX_BASE to user zhangsan
db2 grant insert on table ODS.NC_TAX_BASE to user zhangsan
db2 grant update on table ODS.NC_TAX_BASE to user zhangsan
db2 grant delete on table ODS.NC_TAX_BASE to user zhangsan
取消对应的权限
db2 revoke select on table DW.CW_R_REAL_TAX_ANLS_D from user zhangsan
db2 revoke insert on table DW.CW_R_REAL_TAX_ANLS_D from user zhangsan
db2 revoke update on table DW.CW_R_REAL_TAX_ANLS_D from user zhangsan
db2 revoke delete on table DW.CW_R_REAL_TAX_ANLS_D from user zhangsan
创建schema
db2 create schema user_name
*数据库中的User和Schema到底什么关系呢?其实User就是每个Schema的主人,如果当前操作数据库的用户有默认的Schema(在创建用户的时候指
定了),那么新表被创建在默认的Schema上。 通过这样的方法,主要是方便管理。
在DB2中的schema的概念和ORACLE中的概念有着本质的区别:
在ORACLE中schema和用户是同一个;
在DB2中schema不一定是用户,因为db2内部没有用户的概念,连接用户必须是操作系统用户.
db2删除schema------------
需要把schema下的所有对象都删除
DROP SCHEMA ERRORSCHEMA1 RESTRICT
--schema中不能含有任何对象
--RESTRICT 关键字强制实施以下规则:不能在指定的模式中为要从数据库中删除的模式定义对象。RESTRICT 关键字并非可选关键字
3、数据库级特权
授予数据库级特权权限参数有:
CONNECT: 用户可以连接数据库
CREATETAB: 用户可以在数据库中创建表
LOAD: 用户可以将数据装载进表中
BINDADD: 用户可以使用 BIND 命令在数据库中创建包
CREATE_NOT_FENCED: 用户可以创建 unfenced 用户定义函数(UDF)
IMPLICIT_SCHEMA: 用户可以在数据库中隐式地创建模式,而不需要使用 CREATE SCHEMA 命令
CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程
SECADM:安全性管理员
Dbadm:DBADM 用户对一个数据库有几乎完全的控制能力。DBADM 用户不能执行某些维护或管理任务
db2数据库特权大体上分成两类:数据库级特权(针对数据库中的所有对象)和对象级特权(与特定的对象相关联)。
1、DBADM
用户对一个数据库有几乎完全的控制能力。DBADM 用户不能执行某些维护或管理任务,比如:
* drop database
* drop/create tablespace
* backup/restore database
* update db cfg for database db name
但是,他们可以执行以下任务:
* db2 create/drop table
* db2 grant/revoke(任何特权)
* db2 runstats(任何表)
DBADM 用户还被自动地授予对数据库对象及其内容的所有特权。因为DBADM权限是一个数据库级权限,所以它可以被分配给用户和用户组。
以下命令演示授予 DBADM 权限的不同方法。
* db2 create database test
这个命令将数据库test上的DBADM权限隐式地授予发出此命令的用户。
* db2 connect to sample
db2 grant dbadm on database to user tst1
这个命令只能由SYSADM用户发出;它向用户 tst1 授予示例数据库上的DBADM权限。注意,在授予DBADM权限之前,发出这个命令的用户必须连接到示例数据库。
* db2 grant dbadm on database to group db2grp1
这个命令将 DBADM 权限授予 db2grp1 组中的每个用户。同样,只有SYSADM用户能够发出这个命令。
2、 LOAD 权限
LOAD 权限是一个数据库级权限,所以它可以被分配给用户和用户组。顾名思义,LOAD 权限允许用户对表发出 LOAD 命令。当用大量数据填充表时,
LOAD 命令通常用来替代插入或导入命令,它的速度更快。根据您希望执行的 LOAD 操作类型,仅仅拥有 LOAD 权限可能还不够。可能还需要表上的
特定特权。
拥有 LOAD 权限的用户可以运行以下命令:
* db2 quiesce tablespaces for table
* db2 list tablespaces
* db2 runstats(任何表)
* db2 load insert(必须有表上的插入特权)
* db2 load restart/terminate after load insert(必须有表上的插入特权)
* db2 load replace(必须有表上的插入和删除特权)
* db2 load restart/terminate after load replace(必须有表上的插入和删除特权)
只有拥有 SYSADM 或 DBADM 权限的用户能够对用户或用户组授予或撤消 LOAD 权限。以下示例演示 LOAD 权限如何允许我们的用户使用 LOAD 命
令将数据装载进 sales 表中。假设已经发出了命令 db2 connect to sample。
* db2 grant load on database to user tst1
db2 grant insert on table sales to user tst1
有了 LOAD 权限和插入特权,tst1 就可以对 sales 表发出 LOAD INSERT 或 LOAD RESTART,或者在 LOAD INSERT 之后发出
TERMINATE。
* db2 grant load on database to group grp1
db2 grant delete on table sales to group grp1
db2 grant insert on table sales to group grp1
有了 LOAD 权限以及删除和插入特权,grp1 的任何成员就可以对 sales 表发出 LOAD REPLACE 或 LOAD RESTART,或者在 LOAD REPLACE
之后发出 TERMINATE。
3、其他特权
用户可以拥有的数据库级特权有:
* CREATETAB: 用户可以在数据库中创建表。
* BINDADD: 用户可以使用 BIND 命令在数据库中创建包。
* CONNECT: 用户可以连接数据库。
* CREATE_NOT_FENCED: 用户可以创建 unfenced 用户定义函数(UDF)。
* IMPLICIT_SCHEMA: 用户可以在数据库中隐式地创建模式,而不需要使用 CREATE SCHEMA 命令。
* LOAD: 用户可以将数据装载进表中。
* QUIESCE_CONNECT: 用户可以访问处于静默(quiesced)状态的数据库。
* CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程。
数据库对象 包括表、视图、索引、模式和包。幸运的是,大多数对象级特权的意义无需解释。下表总结了这些特权。
特权名称 相关对象 描述
CONTROL 表、视图、索引、包、别名、不同的类型、用户定义函数、序列 提供对对象的全部权限。拥有这种特权的用户还可以向其他用户授予或撤消
对对象的特权。
DELETE 表、视图 允许用户从对象中删除记录。
INSERT 表、视图 允许用户通过 INSERT 或 IMPORT 命令将记录插入对象中。
SELECT 表、视图 提供使用选择语句来查看对象内容的能力。
UPDATE 表、视图 允许用户使用更新语句修改对象中的记录。
ALTER 表 允许用户使用更改语句更改对象定义。
INDEX 表 允许用户使用创建索引语句在对象上创建索引。
REFERENCES 表 提供在对象上创建或删除外键约束的能力。
BIND 包 允许用户重新绑定现有的包。
EXECUTE 包、过程、函数、方法 允许用户执行包和例程。
ALTERIN 模式 允许用户修改模式中的对象定义。
CREATEIN 模式 允许用户在模式中创建对象。
DROPIN 模式 允许用户删除模式中的对象。
4、对象级特权
特权名称 | 相关对象 | 描述 |
CONTROL | 表、视图、索引、包、别名、不同的类型、用户定义函数、序列 | 提供对对象的全部权限。拥有这种特权的用户还可以向其他用户授予或撤消对对象的特权。 |
DELETE | 表、视图 | 允许用户从对象中删除记录。 |
INSERT | 表、视图 | 允许用户通过 INSERT 或 IMPORT 命令将记录插入对象中。 |
SELECT | 表、视图 | 提供使用选择语句来查看对象内容的能力。 |
UPDATE | 表、视图 | 允许用户使用更新语句修改对象中的记录。 |
ALTER | 表 | 允许用户使用更改语句更改对象定义。 |
INDEX | 表 | 允许用户使用创建索引语句在对象上创建索引。 |
REFERENCES | 表 | 提供在对象上创建或删除外键约束的能力。 |
BIND | 包 | 允许用户重新绑定现有的包。 |
EXECUTE | 包、过程、函数、方法 | 允许用户执行包和例程。 |
ALTERIN | 模式 | 允许用户修改模式中的对象定义。 |
CREATEIN | 模式 | 允许用户在模式中创建对象。 |
DROPIN | 模式 | 允许用户删除模式中的对象。 |
关于对象级特权的信息存储在系统编目视图中。视图名称是syscat.tabauth、syscat.colauth、syscat.indexauth、syscat.schemaauth、syscat.routineauth 和syscat.packageauth。·
5、显式特权和隐式特权
1、显式特权
可以使用 GRANT 和 REVOKE 命令显式地 对用户或组授予或撤消特权。
2、隐式特权
当发出某些命令时,DB2 可能会自动地授予特权,而不需要像前面看到的那样发出显式的 GRANT 语句。下表总结了会导致数据库管理程序隐式地授予
特权的一些命令。注意,当删除创建的对象时,这些特性会隐式地撤消。但是,当显式地撤消更高级的特权时,不会撤消它们。
发出的命令 | 授予的特权 | 被授予特权的用户 |
CREATE TABLE mytable | mytable 上的 CONTROL | 发出命令的用户 |
CREATE SCHEMA myschema | myschema 上的 CREATEIN、ALTERIN 和 DROPIN,以及将这些特权授予其他用户的能力 | 发出命令的用户 |
CREATE VIEW myview | myview 上的 CONTROL(只有在用户拥有 myview 定义中引用的所有表和视图上的 CONTROL 特权的情况下) | 发出命令的用户 |
CREATE DATABASE mydb | mydb 的系统编目表上的 SELECT,mydb 上的 IMPLICIT_SCHEMA * | PUBLIC** |
*当用户创建数据库时,隐式地授予这个用户这个数据库上的 DBADM 权限。获得 DBADM 权限就会隐式地授予 CONNECT、CREATETAB、BINDADD、
IMPLICIT_SCHEMA 和 CREATE_NOT_FENCED 特权。即使撤消了 DBADM 权限,这个用户仍然会保留这些特权。
**PUBLIC 是一个特殊的 DB2 组,其中包括特定数据库的所有用户。与前面讨论过的其他组不同,PUBLIC 不必在操作系统级进行定义。在默认情况
下,会向 PUBLIC 授予一些特权。例如,这个组自动接受数据库上的 CONNECT 特权和编目表上的 SELECT 特权。可以对 PUBLIC 组发出 GRANT
和 REVOKE 命令
db2 grant select on table sysibm.systables to public db2 revoke select on table sysibm.systables from public