2、说明:
我们平时写的sql:from A
等同于:from scheme1.A
其中scheme1指的是你的数据源(不同的dbms的写法不同,意义也不同,oracle的话这里是用户名,mysql的话这里是实例名)
所以你的代码相当于:from scheme1.A join scheme2.D
其中scheme2就是你代码中部那段。
数据库架构schema实现了,数据库对象与数据库用户直接映射的分离,用户与数据库对象可以通过schema来映射控制。数据库对象(视图,表,函数等)可以属于某个schema.数据库用户可以属于某个schema,表示拥有某个schema下对象的权限。如果未指定,数据库对象属于架构(schema)dbo,sa用户默认属于dbo架构(dbo:database owner)。当用户访问数据库对象时,如采用server..objects时默认寻找对应schema下的数据库对象:比如用户tmp_user属于schema:tmp,则上述访问默认转变成:server.tmp.objects.
创建用户,并指定用户默认的schema:
PgSQL
CREATE LOGIN [User_tmp] WITH PASSWORD = N'123456'
CREATE USER [User_tmp] FOR LOGIN [User_tmp] WITH DEFAULT_SCHEMA = [tenant]
1
2
CREATE LOGIN [User_tmp] WITH PASSWORD = N'123456'
CREATE USER [User_tmp] FOR LOGIN [User_tmp] WITH DEFAULT_SCHEMA = [tenant]
创建scheme:
PgSQL
CREATE SCHEMA [tenant] AUTHORIZATION [dbo]
1
CREATE SCHEMA [tenant] AUTHORIZATION [dbo]
给schema设置权限:
PgSQL
GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES ON SCHEMA:: [tenant] TO User_tmp
1
GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES ON SCHEMA:: [tenant] TO User_tmp
创建带schema的数据库对象,比如创建一个视图:
PgSQL
CREATE VIEW tenant.PrinterCookies
WITH SCHEMABINDING
AS
SELECT ticket_no, user_agent, create_date, create_by
FROM dbo.PrinterCookies
GO
1
2
3
4
5
6
CREATE VIEW tenant.PrinterCookies
WITH SCHEMABINDING
AS
SELECT ticket_no, user_agent, create_date, create_by
FROM dbo.PrinterCookies
GO
注意:带WITH SCHEMABINDING标记时,如果对应的表做了修改(增加字段除外),需要删除原视图,再去修改对应的物理表,再建带schema的视图。
用户登录时,只显示他所在schema下的所有数据库对象,如上述用户只显示带tenant的对象,无法查看其它dbo的数据库对象。但tenant的所有者是dbo,所以dbo下可以看到所有tenant的对象。
同样的,因为之前给tenant分配了数据库的增,删,改查权限,可以对tenant下的数据对象作相应的 *** 作权限。
当使用下面的SQL语句时:SELECT * FROM SqlTest..PrinterCookies,当用用户[User_tmp]登录查找时,会匹配到SqlTest.tenant.PrinterCookies视图对象,而用dbo登录时,会匹配到SqlTest.dbo.PrinterCookies物理表对象。当然,各自查询呈现的数据是不一样的。
综上所述,基于schema的不同,我们可以规约出很多不同的权限。同时,根据schema的默认匹配,可将数据库的物理表逻辑往上层通过schema来管理控制。从而让不同的登录用户,有差别的访问同一个数据库资源,达到数据管理的目的。
如果是用该用户登录使用以下语句:
SELECT *
FROM USER_TABLES;
如果是用其他用户(在dba权限下):
SELECT *
FROM ALL_TABLES WHERE OWNER='USER_NAME'
扩展资料:
select * from all_tab_comments -- 查询所有用户的表,视图等。
select * from user_tab_comments -- 查询本用户的表,视图等。
select * from all_col_comments --查询所有用户的表的列版名和权注释。
select * from user_col_comments -- 查询本用户的表的列名和注释。
select * from all_tab_columns --查询所有用户的表的列名等信息。
select * from user_tab_columns --查询本用户的表的列名等信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)