2023-05-02 10:04
PostgreSQL数据库手动初始化步骤:
1、创建用户postgres,密码同样是postgres:
net user postgres postgres /add
2、在数据库根目录下建立data目录:
C:Program FilesPostgreSQL9.3md data
3、去掉administrator对data目录的权限:
C:Program FilesPostgreSQL9.3cacls data /e /t /r administrator
处理的目录: C:Program FilesPostgreSQL9.3data
4、将data目录的权限赋给postgres用户:
C:Program FilesPostgreSQL9.3cacls data /e /t /g postgres:C
处理的目录: C:Program FilesPostgreSQL9.3data
5、用postgres用户打开cmd
C:Program FilesPostgreSQL9.3runas /user:postgres cmd.exe
输入 postgres 的密码:
试图将 cmd.exe 作为用户 "SURE-PCpostgres" 启动...
6、进行初始化,初始化用户为postgres,字符集为utf8,locale为C:
C:Program FilesPostgreSQL9.3bininitdb.exe -D https://www.77010.cn//data -E utf8 --locale C -U
postgres
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory https://www.77010.cn//data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
creating configuration files ... ok
creating template1 database in https://www.77010.cn//data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... not supported on this platform
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
"postgres" -D "https://www.77010.cn//data"
or
"pg_ctl" -D "https://www.77010.cn//data" -l logfile start
C:Program FilesPostgreSQL9.3bin
7、启动数据库,进入客户端:
C:Program FilesPostgreSQL9.3bin"pg_ctl" -D "https://www.77010.cn//data" start
server starting
C:Program FilesPostgreSQL9.3binLOG: database system was shut down at 2014-
09-18 10:19:54 HKT
LOG: autovacuum launcher started
C:Program FilesPostgreSQL9.3binLOG: database system is ready to accept con
nections
C:Program FilesPostgreSQL9.3binpsql.exe
psql (9.3.5)
Type "help" for help.
postgres=#
8、初始化完成。
安装PostgreSQL数据库之后,默认是只接受本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相 应的配置。配置远程连接PostgreSQL数据库的步骤很简单,只需要修改data目录下的pg_hba.conf和postgresql.conf, 其中pg_hba.conf是用来配置对数据库的访问权限,postgresql.conf文件用来配置PostgreSQL数据库服务器的相应的参数。 下面介绍配置的步骤:
1.修改pg_hba.conf文件,配置用户的访问权限:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.1.0/24 md5
# IPv6 local connections:
host all all ::1/128 trust
其中红色标识的内容为新添加的内容,表示允许网段192.168.1.0上的所有主机使用所有合法的数据库用户名访问数据库,并提供加密的密码验 证。在我们的环境中,我们需要在主机192.168.1.5上使用postgres用户访问192.168.1.9上的PostgreSQL数据库。
2.修改postgresql.conf文件,将数据库服务器的监听模式修改为监听所有主机发出的连接请求。
定位到#listen_addresses='localhost'。PostgreSQL安装完成后,默认是只接受来在本机localhost的连接请 求,通过将改行内容修改为listen_addresses='*'来允许数据库服务器监听来自任何主机的连接请求:
listen_addresses='*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*'=all
# (change requires restart)
修改之后,保存并退出,然后重起数据库,就可以在在远程机器上访问PostgreSQL数据库了。
另外,数据库管理小贴士:
matrix数据库使用的是PostgreSQL数据库。你可以安装一个类似phpmyadmin的管理
禁止的权限规则集如果权限规则不是一个集合,因为只有与用户或角色关联的权限规则才允许访问,所以用户的权限是一个闭合区域,不想用户拥有某些权限时,只要不进行关联授权即可。如果权限规则使用通配符变成一个集合,那么用户的权限将变成一个开放区域,比如上面的论坛文章列表,假设论坛文章按照“版面/作者/文章标题”作为资源命名,那么将(阅览,版面/作者/*)授权给某用户时,该用户允许阅览该版面下该作者的所有文章,假设现在有一种管理需求要求某用户可以阅览某版面下某作者除某几种文章标题外的所有文章,这样单纯的允许授权难以实现这个管理需求。法律有许可和禁止的区别,那么权限管理也应该有许可和禁止两种授权,上面的不允许访问某几种文章标题的文章就是一种禁止规则,如果将这种禁止规则合并到允许规则中,就可以解决上面的问题。这就相当于画了一个大圈表示可以访问的区域,但是大圈里面的某些小圈是不可以访问的区域。这又带来一个问题,假设允许的和禁止的规则重叠,以谁为准?这个没有一个准则,不过基于安全性考虑,应该采用禁止优先,只要是禁止的集合,就算有允许的集合重叠,也不允许访问。提高权限验证效率使用关系数据库存储权限数据时,权限数据表更新和查询的操作频繁度通常小于1:9,也就是这是一个典型的OLAP系统,以查询为主,所以可以采用OLAP的优化策略进行优化,但是大多数优化策略都不具备实时性,如果兼顾实时性和效率要求,可以单独创建一个内存数据库,这个内存数据库只存放用户、资源、操作关联关系,也就是(用户,操作,资源)集合,如果用户通过角色关联到权限规则,那么将这些用户到权限规则的间接传递关系转变成直接传递关系保存。这个内存数据库就相当于权限数据的缓存,可以保证很高的查询效率,并且该内存数据库与权限管理保持同步,可以保证实时性。安装和配置附件是权限管理和权限验证的实现,也有用户管理的演示,不过用户管理很粗糙,实际使用需要做进一步开发,之所以没有开发相对完善的用户管理,是因为现在已有的系统通常都有完善的用户管理。下面简单讲解安装配置,只在Tomcat5523+MySQL5037+jre1.5.0_12下测试过。1.下载rbac+profile.rar,解压,得到一系列文件,文件用途如下:profile.admin.src.v1.jar用户管理源代码rbac.admin.src.v2.jar权限管理源代码rbac.auth.src.v2.jar权限验证源代码profile.v1.MySQL5.sql用户管理用户数据表profile.war用户管理WEB系统rbac.v2.MySQL5.sql权限管理数据表rbac.war权限管理WEB系统2.创建数据库profile,使用UTF-8导入profile.v1.MySQL5.sql到profile,使用下面SQL创建用户root/1:InsertintoT_PROFILE(USER_ID,USER_NAME,USER_PASSWORD)values(‘1’,‘root’,sha1(‘1’));如果创建过先前SSO单点登陆的用户数据表,可以跳过这步,使用先前的数据表。3.创建数据库rbac,使用UTF-8导入rbac.v2.MySQL5.sql到rbac。4.拷贝profile.war和rbac.war到Tomcat5523/webapps/,会自动生成profile和rbac目录。5.参考配置单点登陆,因为权限管理和用户管理需要依赖单点登陆。6.下载相关依赖Java库:下载cglib最新版本:8080/profile/admin/profile.jsp?rbac.admin.db.rbac.ds.c3p0.url=jdbc:mysql://localhost/rbacrbac.admin.db.rbac.ds.c3p0.user=rootrbac.admin.db.rbac.ds.c3p0.password=1
仔细分析,无非几个原因:
1、log目录的权限问题,比如log文件指定的目录postgres用户无权写入,因此没有产生任何log文件。检查了/var/lib/postgresql/11/main的目录,没有发现问题。
2、配置文件的权限问题,检查了/etc/postgresql/11/main目录,也没有发现任何问题,postgres用户是有权限读取配置文件的。
3、配置文件有错误导致无法正常启动postgresql。排除了上面的两个原因,这个应该是最大的原因了。但是,错误在哪里呢?没有给出提示啊!
?尝试了service postgresql start, pg_ctrcluster, pg_ctl均无法给出任何提示,后来才想明白,这几个都是对postmaster的脚本封装啊,也许这些封装忽略了什么重要的信息!应该直接运行postmaster才能得到直接的出错提示的!果然,执行/usr/lib/postgresql/11/bin/下的postmaster给出了提示,执行语句:
?看到这里立刻明白了:我将postgresql.conf中的lc_messages改为了 en_US.UTF-8,可是没有产生en_US.UTF-8的locale文件啊!于是修改/etc/locales.gen文件添加en_US.UTF-8,执行locales.gen,再次启动postgresql,成功!
1 安装openssl?yum install openssl
2 生成?openssl genrsa -des3 -out server.key 1024(密码记住,生成完毕后用openssl rsa -in server.key -out server.key移除密码)
3 更改权限
?chmod 400 server.key
chown postgres:postgres server.key
4 生成证书crt文件证书内容自己改
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British [email protected]hebrain.ca'
? cp server.crt root.crt
5 将三个文件server.key server.crt root.crt复制到pgdata目录
6 编辑postgresql.conf 文件:
ssl=on
ssl_ca_file='root.crt'
ssl_cert_file='server.crt'
ssl_key_file='server.key'
7修改pg_hba.conf
hostssl all postgres 0.0.0.0/0 md5 clientcert=1
8重启服务
systemctl restart postgresql-10
以上工作为服务端配置,接下来要配置客户端的证书
在服务器上生成客户端的证书:
9 生成私钥openssl genrsa -des3 -out /tmp/postgresql.key 1024(移除密码命令:openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key)
10 创建客户端证书postgresql.crt,该证书必须用服务器上的root.crt签名,同时一定注意证书的Common Name(CN)必须与访问服务器的用户名一致:
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=pgUser'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial
11 把/tmp目录下面的上述三个文件包括root.crt一起复制到客户端:~/.postgresql/(windows下面为%appdata%postgresql)
12 注意删除服务器上面/tmp目录下面生成的文件。