数据库架构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、使用CREATEDATABASE该命令将创建一个数据库PostgreSQL的shell提示符,但你应该有适当的权限来创建数据库。默认情况下,创建新的数据库将通过克隆标准系统数据库template1。语法:CREATEDATABASE语句的基本语法如下:CREATEDATABASEdbname;其中dbname是要创建的数据库的名称。例子:下面是一个简单的例子,这将创建testdb在PostgreSQL模式:postgres=#CREATEDATABASEtestdb;postgres-#2、使用createdb的命令PostgreSQL命令行可执行createdb是是SQL命令CREATEDATABASE一个包装器。此命令和SQL命令CREATEDATABASE之间唯一的区别是,前者可以直接在命令行中运行,它允许的注释被添加到数据库中,全部在一个命令。语法:createdb语法如下所示:createdb[option][dbname[description]]参数下表列出了参数及它们的描述。参数名称描述dbnameThenameofadatabasetocreatedescriptionSpecifiesacommenttobeassociatedwiththenewlycreateddatabaseoptionscommand-lineargumentswhichcreatedbaccepts选项下表列出了命令行参数CREATEDB接收:选项描述-DtablespaceSpecifiesthedefaulttablespaceforthedatabase-eEchothecommandsthatcreatedbgeneratesandsendstotheserver-EencodingSpecifiesthecharacterencodingschemetobeusedinthisdatabase-llocaleSpecifiesthelocaletobeusedinthisdatabase-TtemplateSpecifiesthetemplatedatabasefromwhichtobuildthisdatabase--helpShowhelpaboutdropdbcommandlinearguments,andexit-hhostSpecifiesthehostnameofthemachineonwhichtheserverisrunning-pportSpecifiestheTCPportorthelocalUnixdomainsocketfileextensiononwhichtheserverislisteningforconnections-UusernameUsernametoconnectas-wNeverissueapasswordprompt-WForcecreatedbtopromptforapasswordbeforeconnectingtoadatabase打开命令提示符,然后去是PostgreSQL安装所在的目录。进入到bin目录,执行下面的命令创建一个数据库。createdb-hlocalhost-p5432-Upostgresstestdbpassword上面的命令会提示Postgres的默认的PostgreSQL管理用户的密码,以便提供密码和继续创建新的数据库。一旦创建数据库时可以使用上述方法,可以检查它在列表中的数据库使用l即反斜线el命令如下:postgres-#lListofdatabasesName|Owner|Encoding|Collate|Ctype|Accessprivileges-----------+----------+----------+---------+-------+-----------------------postgres|postgres|UTF8|C|C|template0|postgres|UTF8|C|C|=c/postgres+|||||postgres=CTc/postgrestemplate1|postgres|UTF8|C|C|=c/postgres+|||||postgres=CTc/postgrestestdb|postgres|UTF8|C|C|(4rows)postgres-#
注:启动时可能会出现权限问题,所以添加了 privileged: true
在docker-compose的时候 docker-compose up会优先使用已有的容器,而不是重新创建容器。需要带上 --force-recreate 参数重新创建容器 docker-compose up -d --force-recreate 。
本文内容参考:
>
通过以上设置后,远端及其无法访问此数据库,因此,需要修改postgreSQL数据库配置来实现远程访问。具体 *** 作如下:
修改/opt/postgres/91/data/postgresqlconf文件的内容:
监听任何地址的访问,修改连接权限:
#listen_address = ‘localhost’ 修改为listen_address = ‘’
启用密码验证
#password_encryption = on 修改为 password_encryption = on
修改/opt/postgres/91/data/pg_hbaconf文件的内容:
可访问的用户ip段
在文件末尾加入:host all all 0000/0 md5
重启postgreSQL数据库:sudo /etc/initd/postgresql-91-openscg restart
我用ubuntu,所以不大懂yum具体怎么 *** 作,但我想应该与apt的功能差不多。首先,postgresql是很有名的数据库,你用不着指定具体的版本。你可以直接用yum去查询源或者库里是否有这个软件(具体 *** 作请参考yum的文档,我这边是apt-cachesearchpostgresql)当然,如果你用新立得的话,它的编辑菜单里有个按任务安装软件,里面有postgresql数据库的选项。安装postgresql之后难免要配置它。你也许会很奇怪,安装的过程中没有提示你添加用户或者添加数据库密码(在ubuntu上就是这样,不知道红帽是什么样的情况)。其实,随着数据库的安装,已经添加了用户postgres,你要做的是先登录到这个用户的shell下,再添加你需要的实用用户。按照我的 *** 作,是这样的,先passwdpostgres改掉本地用户postgres的密码然后用这个postgres登录到系统(可以Ctrl+Alt+F1-F5来切换虚拟控制台)。createuser本地帐户##如果你本地用户名是joe,那么就createuserjoe会提示你是否创建超级用户。一般来说都会建一个超级用户来管理,当然你也可以选择建立一个普通的用户。现在基本上就配置完毕了,回到你刚才的用户登录,例如joe,可以用psql来登录到postgresql了。如果你需要编程登录数据库,那么你得先建库,再建role,然后通过role登录。打个比方,用php登录到postgresql,使用PEAR的MDB2软件包登录,你可以这样createdb##假设你为当前用户(本地帐户)建立了一个超级数据库用户(角色,role),该命令会建立一个与当前用户同名的数据库,可以指定数据库名来建别的库。psql##以超级用户登录到数据库(与本地用户同名)alterrole本地用户名password'newpassword';##为本地数据库用户(角色)建立一个密码,这个密码将来用于你编程登录数据库现在可以用本地用户作为角色通过php编程登录数据库了,因为密码和用户名都是已知的了。当然,用超级用户登录数据库有安全问题,如果你建立一个普通角色的话,需要给普通用户赋权,这个问题需要你参考postgresql的用户手册,百度文库里有英文91的用户手册,查询权限一节即可解决此问题。或者,可以使用pgadmin这一图形界面来解决权限等问题。
PostgreSQL数据库服务器,就需要进行相应的配置。 配置远 程连接PostgreSQL数据库的步骤很简单,只需要修改data目录下的pg_hbaconf和postgresqlconf。 pg_hbaconf:配置对数据库的访问权限, postgresqlconf:配置PostgreSQL数据库服务器的相应的参数。 步骤: 1修改pg_hbaconf文件,配置用户的访问权限(#开头的行是注释内容): # TYPE DATABASE USER CIDR-ADDRESS METHOD # “local” is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127001/32 trust host all all 19216810/24 md5 # IPv6 local connections: host all all ::1/128 trust 其中,第7条是新添加的内容,表示允许网段19216810上的所有主机使用所有合法的数据库用户名访问数据库,并提供加密的密码验证。 其中,数字24是子网掩码,表示允许19216810--1921681255的计算机访问! 2修改postgresqlconf文件,将数据库服务器的监听模式修改为监听所有主机发出的连接请求。 定位到#listen_addresses=’localhost’。PostgreSQL安装完成后,默认是只接受来在本机localhost的连接请 求。 将行开头都#去掉,将行内容修改为listen_addresses=’‘来允许数据库服务器监听来自任何主机的连接请求 上面就是Linux设置PostgreSQL远程访问的方法介绍了,如果你不设置,则PostgreSQL默认只能范围本地,功能比较局限。
以上就是关于在SQL Server里面SCHEMABINDING是什么意思全部的内容,包括:在SQL Server里面SCHEMABINDING是什么意思、PostgreSQL 数据库出现这样的错误是怎么回、使用docker compose部署postgreSQL数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)