DB2中两个不同的用户建相同的表名怎么实现
发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
DB2中两个不同的用户建相同的表名如何实现
因应用实现需要在一个数据库中创建两个用户(user1,user2),两个用户下分别建相同的表(tab1),
在数据库连接时,用user1连接,即访问user1下的tab1表数据,用user2连接时,即访问user2下的tab1表。
请问能否实现以上需求呢?
如果用schema实现,则需要写成select * from user1.tab1 这样的语句,
不能做到通过切换数据库联接即实现访问不同的物理数据表的方法。
因此这个方法不能接受。
------解决思路----------------------
用户登录后,创建数据表时不指定schema,那么表模式会默认是用户名,查询是不指定模式名也会默认使用当前用户名为模式名。
------解决思路----------------------
DB2数据库用户就是操作系统里面的一个用户,在DB2里面有Schema(模式)的概念,当你通过不同的数据库用户连接到数据库里面的时候这个数据库用户的模式名就是用户名.
先创建操作系统用户
.......
使用当前实例账户连接数据库
#db2 connect to dbname
给刚刚创建的用户受数据库连接权限(根据需求进行授权)
#db2 grant connect on database to user test
断开连接
#db2 connect reset
使用刚刚创建的账户登录
#db2 connect to dbname user test using password
说明:不同数据账户登录并创建的表就属于谁的,查询的时候就不用通过Schema加点符号再加表名.如:Schema.tablename.
你可以使用SQuirrel客户端工具连接进去看,可以看到详细的Schema对应的数据内容.
------解决思路----------------------
一个SCHEMA下不能有同名Database Objects,无论是建同名的表或者View都不行。
如果必须使用同名表,而且现在是针对不同用户,貌似只能通过在不同的Schema上建立同名表来达到要求,具体执行的时候如果必须省略schema名字,可以用SET CURRENT SCHEMA语句来达到切换当前SCHEMA的效果。
但是!!无论如何,重名数据库表是BAD DESIGN,就是数据库表不应该如此设计。无论你什么应用,都可以通过使用不同名表来达到。楼主不妨简单说明为什么需要在一个SCHEMA下同名表不可。
从字面的需求,不同用户登录进来使用不同的密码,访问同名表而不需要特别指定SCHEMA名的假设在实战中应该不成立,可以避免。
如果你想隐藏真实的SCHEMA名,可以采用建立不同的别名,同时在别名上设置访问权限就好了,这样SCHEMA的别名可以针对不同的用户群有不同的设置,而内部真实的数据库SCHEMA不至于暴露出去,一定程度上达到Multi-Tenant的功能。
必须指出的是,无论是DB2,Oracle还是MS SQL Server,都没有真正意义上的实现Multi-Tenancy,现在的云数据库可以差不多可以,就是实现不同层次的多独立用户共享一个Database Object而相互不影响。
理想状态的Multitanency应该是可以做到:
一,.多个用户分离独立使用数据库。 (现在数据库都可以多用户,现在DB2做得到)
二,多个用户分别独立使用一个数据库实例(就是share DB2 Instance,现在DB2做得到)
三,多个用户分别独立使用一个数据库SCHEMA。 (现在DB2做得到,通过设置同SCHEMA下不同Database object的访问权限可以做到)
四,多个用户分别独立使用一个表,视图。(这个目前DB2还做不到,你不可能用过DBA来设置一部分用户可以使用某个表的某一部分,而别的用户只能使用同表的另一部分。而相互不影响彼此操作。
有意思,看似简单的一个问题,其实有不少奥妙。
:-)
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DB2安装问题:安装所需的CAB文件'Datal,cab'已损坏……
我在XP SP3 系统下安装DB2时,快要安装完成的时候,弹出一错误提示框框,错误提示...
-
如何获取同一个表中不同类型的最新值
假如有一个表的结构和数据是:
CODE TRAN_DATE AMOUNT
TTT 2010-10-12 1000
TTT 2010-12-...
-
DB2中如何区分是否有效视图,如何获取有效的视图。求助!高手尽请来指点米经!
如题。
如何查看视图的状态是有效还是无效?
怎么选出某...
-
DB2高手帮帮我
我的DB2安装在D盘 备份文件在E盘 日志文件也在E盘
执行命令: restore db po from E: taken at 2010121207404...
-
如何用命令行连接DB2数据库?
本人求用命令行连接DB2数据库的方法?
------解决方案--------------------
Windows界面下运行“db2c...
-
求教db2 sql
怎么删除一个表中的前5000行记录,因为我有一个表数据量很大,做删除的时候事务日志会满,因此要分批提交,注:不是删除全表
...
-
新手请教
小的好久没有操作过数据库了,今天想在自己机器上部署一个数据库
CREATE DATABASE sample ON G: ALIAS sample
USING CO...
-
关于创建实例的时候,指定用户的问题
创建实例的时候,指定的db2fenc1这个用户一定要吗?建的意义是什么?
------解决方案-------------...
-
关于DB2的一些提问,希望高手解答,急急急,谢谢
1·在存储过程内部怎么取得每个sql执行后的sqlcode,因为我们项目的存储过程每一步...
-
如何把ACCESS数据库导入到db2中。
如题。如何把ACCESS数据库导入到db2中。
------解决方案--------------------
在ACCESS中创建...