在SQL Server里面SCHEMABINDING是什么意思

在SQL Server里面SCHEMABINDING是什么意思,第1张

数据库架构schema实现了,数据库对象与数据库用户直接映射的分离,用户与数据库对象可以通过schema来映射控制。

数据库对象(视图,表,函数等)可以属于某个schema数据库用户可以属于某个schema,表示拥有某个schema下对象的权限。如果未指定,数据库对象属于架构(schema)dbo,sa用户默认属于dbo架构(dbo:database owner)。当用户访问数据库对象时,如采用serverobjects时默认寻找对应schema下的数据库对象:比如用户tmp_user属于schema:tmp,则上述访问默认转变成:servertmpobjects

创建用户,并指定用户默认的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 tenantPrinterCookies

WITH SCHEMABINDING

AS

SELECT ticket_no, user_agent, create_date, create_by

FROM dboPrinterCookies

GO

1

2

3

4

5

6

CREATE VIEW tenantPrinterCookies

WITH SCHEMABINDING

AS

SELECT ticket_no, user_agent, create_date, create_by

FROM dboPrinterCookies

GO

注意:带WITH SCHEMABINDING标记时,如果对应的表做了修改(增加字段除外),需要删除原视图,再去修改对应的物理表,再建带schema的视图。

用户登录时,只显示他所在schema下的所有数据库对象,如上述用户只显示带tenant的对象,无法查看其它dbo的数据库对象。但tenant的所有者是dbo,所以dbo下可以看到所有tenant的对象。

同样的,因为之前给tenant分配了数据库的增,删,改查权限,可以对tenant下的数据对象作相应的 *** 作权限。

当使用下面的SQL语句时:SELECT FROM SqlTestPrinterCookies,当用用户[User_tmp]登录查找时,会匹配到SqlTesttenantPrinterCookies视图对象,而用dbo登录时,会匹配到SqlTestdboPrinterCookies物理表对象。当然,各自查询呈现的数据是不一样的。

综上所述,基于schema的不同,我们可以规约出很多不同的权限。同时,根据schema的默认匹配,可将数据库的物理表逻辑往上层通过schema来管理控制。从而让不同的登录用户,有差别的访问同一个数据库资源,达到数据管理的目的。

1、windows下postgresql的安装

我下载的为xxx92exe一路默认安装即可。安装位置为C:\Program Files\PostgreSQL。

安装完毕后,在dos下执行命令

>net user

列出当前系统用户名称。我的用户名为Administrator。

>psql –U Administrator –d postgres

该命令表示通过数据库用户Administrator连接数据库postgres。

l 若显示psql不是内部或外部命令,则说明postgresql的bin文件路径没添加到windows系统中,右击“我的电脑”->”属性”->”高级”->”环境变量”->”Administrator”的用户变量,选中“PATH”,点击编辑,将”C:\Program Files\PostgreSQL\92\bin”添加进去,注意与前面的路径用”;”隔开。电脑重启生效。

l 若显示角色Administrator不存在,则必须在postgresql数据库中添加该用户才能使其可以登录。

在postgresql中

查询系统用户

postgres=#select from pg_user;

查询系统中的数据库

postgres=#select from pg_database;

说明一下:“template1”是Postgresql在初始化时自动创建的测试数据库。

创建postgresql数据库Administrator用户

方式1

在PostgreSQL中创建用户postgreSQL用户Administrator

用SQL Shell(psql)通过用户postgres登录PostgreSQL,创建用户Administrator,

postgres=#create user “Administrator”;

方式2

通过windows下dos创建postgresql用户Administrator

将PostgreSQL文件夹bin路径添加到系统环境中后重启生效

通过windows下dos创建postgresql用户是区分大小写的。

配置客户机访问

为了配置远程主机和用户可以连接到PostgreSQL服务,你需要pg_hbaconf文件。文件包含大量注释记录用于远程访问的选项。在我们的安装示例中,我们允许局域网中任何主机的任何用户访问服务器上的数据库。为了达到这个目的,我们添加以下的一行记录到文件尾:

host all all 19216800/16 trust

 这意味着所有IP地址由192168开始的计算机可以访问所有的数据库。最简单的使配置生效的方法就是重启服务器。

在dos下 *** 作,通过createuser –Uolduser –P newuser来创建。

比如我们想创建postgresql数据库用户Administrator。

>createuser –U postgre –P Administrator

这样创建的数据库用户Administrator没有创建数据库的权利,可以通过pgAdmin III登录进行查看。

若使其可以创建数据库可以参照下面内容进行设置:

>createuser –U postgre –s Administrator

这样具有创建数据库能力。

createuser的用法可以通过在dos中输入createuser –help查看。

MicrosoftWindows XP [版本 512600]

(C)版权所有 1985-2001 Microsoft Corp

C:\Documentsand Settings\Administrator>createuser --help

createuser创建一个新的 PostgreSQL 用户

使用方法:

createuser [选项] [用户名]

选项:

-c, --connection-limit=N 角色的连接限制(缺省: 没有限制)

-d, --createdb 此角色可以创建新数据库

-D, --no-createdb 此角色不可以创建新数据库(默认)

-e, --echo 显示发送到服务端的命令

-E, --encrypted 口令加密存储

-i, --inherit 角色能够继承它所属角色的权限

(这是缺省情况)

-I, --no-inherit 角色不继承权限

-l, --login 角色能够登录(这是缺省情况)

-L, --no-login 角色不能登录

-N, --unencrypted 口令不加密存储

-P, --pwprompt 给新角色指定口令

-r, --createrole 这个角色可以创建新的角色

-R, --no-createrole 这个角色没有创建其它角色的权限(默认)

-s, --superuser 角色将是超级用户

-S, --no-superuser 角色不能是超级用户(默认)

-V, --version 输出版本信息, 然后退出

--interactive 提示缺少角色名及其属性

而不是使用默认值

--replication 角色能启动复制

--no-replication 角色不能启动复制

-, --help 显示此帮助, 然后退出

联接选项:

-h, --host=HOSTNAM 数据库服务器所在机器的主机名或套接字目录

-p, --port=PORT 数据库服务器端口号

-U, --username=USERNAME 联接用户 (不是要创建的用户名)

-w, -no-password 永远不提示输入口令

-W, --password 强制提示输入口令

臭虫报告至<pgsql-bugs@postgresqlorg>

C:\Documentsand Settings\Administrator>

方式3

在C:\Program Files\PostgreSQL\92\bin文件夹下有可执行文件createuserexe,我双击后,该文件执行一闪就关闭,只好在dos中输入cmd打开窗口,将该文件拖入窗口中,在输入“ –U postgres –P Adiminisrator”然后回车,如下图所示,即可创建数据库用户Administrator。但此时该用户不具有创建database的能力,可以通过pgAdmin III查看。

psql的用法可以通过在dos下输入psql –help查看,如下图所示。

MicrosoftWindows XP [版本 512600]

(C) 版权所有1985-2001 Microsoft Corp

C:\Documentsand Settings\Administrator>psql --help

psql是PostgreSQL 的交互式客户端工具。

使用方法:

psql [选项] [数据库名称 [用户名称]]

通用选项:

-c,--command=命令 执行单一命令(SQL或内部指令)然后结束

-d, --dbname=数据库名称 指定要连接的数据库 (缺省:"Administrator")

-f, --file=文件名 从文件中执行命令然后退出

-l, --list 列出所有可用的数据库,然后退出

-v, --set=, --variable=名称=值

为psql变量(名称)设定值

-V, --version 输出版本信息, 然后退出

-X, --no-psqlrc 不读取启动文档(~/psqlrc)

-1 ("one"), --single-transaction

作为一个单一事务来执行命令文件

-, --help 显示此帮助, 然后退出

输入和输出选项:

-a, --echo-all 显示所有来自于脚本的输入

-e, --echo-queries 显示发送给服务器的命令

-E, --echo-hidden 显示内部命令产生的查询

-L, --log-file=文件名 将会话日志写入文件

-n, --no-readline 禁用增强命令行编辑功能(readline)

-o, --output=FILENAME 将查询结果写入文件(或 |管道)

-q, --quiet 以沉默模式运行(不显示消息,只有查询结果)

-s, --single-step 单步模式 (确认每个查询)

-S, --single-line 单行模式 (一行就是一条 SQL 命令)

输出格式选项 :

-A, --no-align 使用非对齐表格输出模式

-F, --field-separator=字符串

设字段分隔符(缺省:"|")

-H, --html HTML 表格输出模式

-P, --pset=变量[=参数] 设置将变量打印到参数的选项(查阅 \pset 命令)

-R, --record-separator=字符串

设定记录分隔符(缺省:换行符号)

-t, --tuples-only 只打印记录i

-T, --table-attr=文本 设定 HTML 表格标记属性(例如,宽度,边界)

-x, --expanded 打开扩展表格输出

-z, --field-separator-zero

设置字段分隔符为字节0

-0, --record-separator-zero

设置记录分隔符为字节0

联接选项:

-h, --host=主机名 数据库服务器主机或socket目录(缺省:"本地接口")

-p, --port=端口 数据库服务器的端口(缺省:"5432")

-U, --username=用户名 指定数据库用户名(缺省:"Administrator")

-w, --no-password 永远不提示输入口令

-W, --password 强制口令提示 (自动)

更多信息,请在psql中输入"\"(用于内部指令)或者"\help"(用于SQL命令),

或者参考PostgreSQL文档中的psql章节

臭虫报告至<pgsql-bugs@postgresqlorg>

C:\Documentsand Settings\Administrator>

PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰常有限。所以一直寻找完美的备份恢复方案。

梦里寻他千百度,伊人却在灯火阑珊处其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令 在数据库的安装目录下,比如我自己本地安装的,路径形如:C:\Program Files\PostgreSQL\95\;然后进入到bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了。里面会找到 pg_dumpexe,psqlexe两个文件。我们怎么用他们?

用法:

备份数据库,指令如下:

pg_dump -h 1648223354 -U postgres databasename > C:\databasenamebak

开始-运行-cmd d出dos控制台;然后 在控制台里,进入PostgreSQL安装目录bin下:

cd C:\Program Files\PostgreSQL\90\bin

最后执行备份指令:

pg_dump -h 1648223354 -U postgres databasename > C:\databasenamebak

指令解释:如上命令,pg_dump 是备份数据库指令,1648223354是数据库的ip地址(必须保证数据库允许外部访问的权限哦~),当然本地的数据库ip写 localhost;postgres 是数据库的用户名;databasename 是数据库名。> 意思是导出到C:\databasenamebak文件里,如果没有写路径,单单写databasenamebak文件名,那么备份文件会保存在C: \Program Files\PostgreSQL\90\bin 文件夹里。

恢复数据库,指令如下:

psql -h localhost -U postgres -d databasename < C:\databasenamebak(测试没有成功)

pg_restoreexe --host localhost --port 5432 --username "postgres" --dbname "symbolmcnew" --no-password --verbose "databasenamebackup"(测试成功)

指令解释:如上命令,psql是恢复数据库命令,localhost是要恢复到哪个数据库的地址,当然你可以写上ip地址,也就是说能远程恢复(必须保证 数据库允许外部访问的权限哦~);postgres 就是要恢复到哪个数据库的用户;databasename 是要恢复到哪个数据库。< 的意思是把C:\databasenamebak文件导入到指定的数据库里。

以上所有的是针对windows而言的,如果在linux下,会不会有效?

在linux里依然有效。有一个值得注意的是:如果直接进入PostgreSQL的安装目录bin下,执行命令,可能会出现 找不到pg_dump,psql的现象,我们在可以这样:

备份:

/opt/PostgreSQL/95/bin/pg_dump -h 1648223354 -U postgres databasename > databasenamebak

恢复:

/opt/PostgreSQL/95/bin/psql -h localhost -U postgres -d databasename < databasenamebak

以上就是关于在SQL Server里面SCHEMABINDING是什么意思全部的内容,包括:在SQL Server里面SCHEMABINDING是什么意思、怎么在windows上连接postgres、postgresql流复制 怎么验证备份等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/sjk/9680219.html

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

发表评论

登录后才能评论

评论列表(0条)

保存