修改密码
在上一节中我们讲了两种连接PostgreSQL的方式,分别是命令行连接和图形界面连接。这里不知道大家有没有发现一个问题,就是不管是在命令行连接或者是图形界面连接的时候,我们都没有要求大家设置密码或者输入密码?
这是因为,在PostgreSQL安装完成后,我们使用/usr/pgsql-9.6/bin/postgresql96-setup initdb命令进行初始化的时候,并没有通过这个命令指定初始用户postgres的密码。当我们在服务器命令行界面使用peer认证直接登陆时,没要求我们输入密码。但是要记住,这样使用数据库是非常危险的,特别是你的数据库布置在云服务器的时候,很可能分分钟就被黑掉。在图形界面连接的时候,我们还设置了使用trust认证方式,这种方式默认允许不使用密码即可进行连接,也是非常危险的。为了避免这些意外情况,我们今天来介绍一下如何设置以及修改用户的密码。
1. 初始化时设置密码
当使用rpm包或PostgreSQL的官方yum源安装好PostgreSQL以后,不要使用/usr/pgsql-9.6/bin/postgresql96-setup initdb命令进行初始化。而是使用initdb命令。这个命令的用法如下:
initdb [命令选项] [--pgdata | -D] 目录名
常用命令选项有:
-A method:设置认证方式,比如method的值可以是peer、ident、md5、trust等值
--auth-host=method:这个选项用来设置远程主机连接的认证方法
--auth-local=method:这个选项用来设置本地主机连接的认证方法
-E encoding:设置服务器端的编码方式
-U user :设置服务器的超级用户
--pwfile=filename:设置超级用户的密码文件,从filename文件中的第一行读取,一般用于设置比较复杂的密码,或者用于自动化处理。
-W :后面不带任何数值,表示在初始化时手动输入密码。
-D/--pgdata:这个用来设置存放PostgreSQL数据库文件和配置文件所在目录。
介绍完这个命令的用法以后,我们尝试使用这个命令来初始化数据库并给postgres用户设置一个密码。这个命令是不能用root用户来允许的,因此先切换到postgres用户:
su - postgres
这个命令默认是在/usr/pgsql-9.6/bin/目录下,因此使用绝对路径来允许这个命令:
/usr/pgsql-9.6/bin/initdb -A md5 -U postgres -W -D 9.6/data
在这个命令中,我们使用的是md5加密密码,超级用户是postgres,目录是postgres用户的家目录下的9.6/data/目录,完整路径是/var/lib/psql/9.6/data/。执行过程如下: