qq_35042856 2016-05-19 03:00 采纳率: 0%
浏览 9544

db2中的用户和schema关系是怎样的

db2中的用户和schema关系是怎样的 一个用户下面可以有很多schema?

  • 写回答

1条回答 默认 最新

  • devmiao 2016-05-19 03:11
    关注

    数据库中Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。简单的说,Schema就是一个(数据库)用户所拥有的数据库的对象。
    在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样,一个大数据库就可以根据应用把其表分开来管理。不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据).
    数据库中的User和Schema到底什么关系呢?其实User就是每个Schema的主人,如果当前操作数据库的用户有默认的Schema(在创建用户的时候指定了),那么新表被创建在默认的Schema上。 通过这样的方法,主要是方便管理。
    在DB2中的schema的概念和ORACLE中的概念有着本质的区别:在ORACLE中schema和用户是同一个;在DB2中schema不一定是用户,因为db2内部没有用户的概念,连接用户必须是操作系统用户.

    查询当前存在的Schema
    db2 "select SCHEMANAME,owner,CREATE_TIME from syscat.schemata"

    在有些情况下,当前登录用户所要访问的Schema可能并不是默认分配给他的Schema,这时查询表前就需要一个前缀来约束所要访问的Schema。
    如:
    db2 "SELECT * FROM wanted_schema_name.table_name"

    或通过下面的命令可以修改当前Schema
    SET CURRENT SCHEMA = 'PAYROLL'
    SET SCHEMA 'PAYROLL'

    在开发过程中,可以通过修改连接字符串来修改默认连接的Schema/Sqlid,
    以JDBC为例(最后的分号一定不能省略):
    jdbc:db2://database_server_uri:port/database_name:currentSchema=schema_name;

    db2 切换 schema 及执行脚本
    在windows 下测试过
    1、打开 cmd 命令
    2、db2cmd
    3、db2 connect to test user meta using portaldb ----连接数据库
    4、db2 select current schema from sysibm.sysdummy1 ----查看当前数据库默认的schema
    5、db2set current schema bast ---设置schema
    6、db2 select current schema from sysibm.sysdummy1 ---查看是否设置成功
    7、db2 -tvf d:\meta\meta_ddl.sql --在指定的schema执行建表语句

    DB2 将schema下所有表的权限赋予一个用户
    db2 "select 'db2 grant select on table DB2INST2.'|| tabname ||' to db2inst1' from syscat.tables where tabschema='DB2INST2'"

    单独对某个Schema下的表进行授权
    C:\Users\Administrator>db2 grant select on table zssqsong.kc_team_user to user zssqding

    DB20000I SQL 命令成功完成。数据库中Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。简单的说,Schema就是一个(数据库)用户所拥有的数据库的对象。
    在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样,一个大数据库就可以根据应用把其表分开来管理。不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据).
    数据库中的User和Schema到底什么关系呢?其实User就是每个Schema的主人,如果当前操作数据库的用户有默认的Schema(在创建用户的时候指定了),那么新表被创建在默认的Schema上。 通过这样的方法,主要是方便管理。
    在DB2中的schema的概念和ORACLE中的概念有着本质的区别:在ORACLE中schema和用户是同一个;在DB2中schema不一定是用户,因为db2内部没有用户的概念,连接用户必须是操作系统用户.

    查询当前存在的Schema
    db2 "select SCHEMANAME,owner,CREATE_TIME from syscat.schemata"

    在有些情况下,当前登录用户所要访问的Schema可能并不是默认分配给他的Schema,这时查询表前就需要一个前缀来约束所要访问的Schema。
    如:
    db2 "SELECT * FROM wanted_schema_name.table_name"

    或通过下面的命令可以修改当前Schema
    SET CURRENT SCHEMA = 'PAYROLL'
    SET SCHEMA 'PAYROLL'

    在开发过程中,可以通过修改连接字符串来修改默认连接的Schema/Sqlid,
    以JDBC为例(最后的分号一定不能省略):
    jdbc:db2://database_server_uri:port/database_name:currentSchema=schema_name;

    db2 切换 schema 及执行脚本
    在windows 下测试过
    1、打开 cmd 命令
    2、db2cmd
    3、db2 connect to test user meta using portaldb ----连接数据库
    4、db2 select current schema from sysibm.sysdummy1 ----查看当前数据库默认的schema
    5、db2set current schema bast ---设置schema
    6、db2 select current schema from sysibm.sysdummy1 ---查看是否设置成功
    7、db2 -tvf d:\meta\meta_ddl.sql --在指定的schema执行建表语句

    DB2 将schema下所有表的权限赋予一个用户
    db2 "select 'db2 grant select on table DB2INST2.'|| tabname ||' to db2inst1' from syscat.tables where tabschema='DB2INST2'"

    单独对某个Schema下的表进行授权
    C:\Users\Administrator>db2 grant select on table zssqsong.kc_team_user to user zssqding

    DB20000I SQL 命令成功完成。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能