同一个服务器不同数据库关联,语句中).D) 是什么意思,代表什么?

同一个服务器不同数据库关联,语句中).D) 是什么意思,代表什么?,第1张

1、回答:是数据表名

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 --查询本用户的表的列名等信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10023193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存