分享

db2?schema?study

 木木的阳光 2011-04-28
数据库特权:

CONNECT 允许用户连接数据库。
BINDADD 允许用户在数据库中创建新包。
CREATETAB 允许用户在数据库中创建新表。
CREATE_NOT_FENCED 允许用户创建非 fenced 用户定义的函数或存储过程。
IMPLICIT_SCHEMA 允许用户在尚不存在的模式中创建对象。
QUIESCE_CONNECT 允许用户在数据库停顿时访问数据库。
CREATE_EXTERNAL_ROUTINE 允许用户创建以 C 语言、Java? 语言、OLD 和 COBOL 编写的存储过程。
模式特权:

CREATEIN 允许用户在模式内创建对象。
ALTERIN 允许用户更改模式内的对象。
DROPIN 允许用户删除模式内的对象。



schema 是一些数据库对象的集合(包括table.view....)

schema可以在创建user之前创建(create schema schema_name),也可以在创建user的时候同时创建schema

schema的获得分两种,显示指定的和隐式获得的
显示的,即通过set schema指定的 set schema = schema_name
隐式的,即没有显示指定schema时,db2将依据当前创建者的user名作为schema。当使用当前用户登陆db的时候,schema会改为当前用户一致。在创建table的时候如果不指定其它的schema,则使用与当前用户名一致的schema。当使用当前的用户创建table时候,会自动在系统中生成一个与当然用户一致的schema。

试验一:
db2 => select * from SYSCAT.SCHEMAAUTH

GRANTOR                                                                                                                          GRANTORTYPE GRANTEE                                                                                                                          GRANTEETYPE SCHEMANAME                                                                                                                       ALTERINAUTH CREATEINAUTH DROPINAUTH
-------------------------------------------------------------------------------------------------------------------------------- ----------- -------------------------------------------------------------------------------------------------------------------------------- ----------- -------------------------------------------------------------------------------------------------------------------------------- ----------- ------------ ----------
SYSIBM                                                                                                                           S           PUBLIC                                                                                                                           G           NULLID                                                                                                                           N           Y            N         
SYSIBM                                                                                                                           S           PUBLIC                                                                                                                           G           SQLJ                                                                                                                             N           Y            N         

  2 record(s) selected.

db2 => 


一个user:nianxbcreate db test
select * from sysibm.SYSSCHEMATA,没有名字为nianxb的schem
create table tab1 (id varchar  (10))
select * from sysibm.SYSSCHEMATA,生成一个名字为nianxb的schema
drop table tab1
select * from sysibm.SYSSCHEMATA,名字为nianxb的schema仍然存在
drop schema nianxb restrict
select * from sysibm.SYSSCHEMATA,名字为nianxb的schema不存在

实验二:
set schema=SQLJ
create table tab1 (id varchar  (10))
select * from sysibm.SYSSCHEMATA
 ,没有生成一个名字为nianxb的schema

实验三:
用户nianxb不属于db2 admin组
connect to test user db2inst1 using passw0rd
给nianxb赋创建table的权限
grant createtab on database to nianxb
db2 => select * from syscat.dbauth

GRANTOR                                                                                                                          GRANTORTYPE GRANTEE                                                                                                                          GRANTEETYPE BINDADDAUTH CONNECTAUTH CREATETABAUTH DBADMAUTH EXTERNALROUTINEAUTH IMPLSCHEMAAUTH LOADAUTH NOFENCEAUTH QUIESCECONNECTAUTH LIBRARYADMAUTH SECURITYADMAUTH
-------------------------------------------------------------------------------------------------------------------------------- ----------- -------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ----------- ------------- --------- ------------------- -------------- -------- ----------- ------------------ -------------- ---------------
SYSIBM                                                                                                                           S           DB2INST1                                                                                                                         U           Y           Y           Y             Y         Y                   Y              Y        Y           Y                  N              N              
SYSIBM                                                                                                                           S           PUBLIC                                                                                                                           G           Y           Y           Y             N         N                   Y              N        N           N                  N              N              
DB2INST1                                                                                                                         U           NIANXB                                                                                                                           U           N           N           Y             N         N                   N              N        N           N                  N              N              

  3 record(s) selected.

no IMPLSCHEMAAUTH( 允许用户在尚不存在的模式中创建对象。设置为N)
disconnect current
connect to test user nianxb using nianxb
create table tab1 (id varchar  (10))
select * from sysibm.SYSSCHEMATA, 生成一个名字为nianxb的schema,(很奇怪)

如何知道SCHEMA的状况?
select * from sysibm.SYSSCHEMATA

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多