PostgreSQL 13 新建数据库、用户及配置
环境 Debian 11
PostgreSQL 安装后会创建一个postgres的系统账户,切换账户可更方便的操作,不切换用户使用psql登录需要手动指定用户和数据库等信息:
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres
当然,如果是刚安装还是要切换到系统postgres用户下进行操作,因为你可能不知道数据库中postgres用户的密码
PostgreSQL封装了一个shell命令 可以创建一个数据库:
1 su - postgres 2 createdb db_name
创建成功后什么都不会显示, 现在可以用psql登录进去看看效果:
1 # postgres用户下直接输入psql 可以进入psql的命令界面 2 psql 3 postgres=#
当然,之前创建数据库的步骤也可以在psql的界面里运行,之前已经创建好了的话再执行会提示你该数据库已存在:
CREATE DATABASE db_name WITH OWNER postgres ENCODING UTF8 TEMPLATE template1;
看看刚创建的数据库 \c可以切换到刚创建数据库:
1 postgres=# \l 2 \c db_name
新建一个角色,PostgreSQL手册说“角色”和“用户”没有本质上的区别,有LOGIN权限的角色就是用户:
1 CREATE ROLE username 2 # 输入\du可以看到刚创建的用户和postgres用户 3 \du
更改新角色权限,增加建库和建角色的权限:
ALTER ROLE username WITH CREATEDB CREATEROLE;
可以用\du查看下,应该增加了Create role 和 Create DB两项
然后再创建一个用户:
CREATE USER user2name WITH ENCRYPTED PASSWORD '123abc';
把user2name变成username的成员,这样user2name应该就会有username的权限了
GRANT username TO user2name;
再输入\du查看,会发现 Member of 那一栏 hoist 的属性变成了 username
其实自己用创建一个用户就行了
更改刚创建的数据库所有权:
ALTER DATABASE db_name OWNER TO user2name;
======================================================================
继续,创建个schema (叫做模式)
CREATE SCHEMA schema_name;
更改模式所有者为user2name,并赋予user2name使用模式的权限
1 ALTER SCHEMA schema_name OWNER TO user2name; 2 GRANT USAGE ON SCHEMA schema_name TO user2name;
赋予user2name用户各种权限:
1 #赋予访问数据库权限 2 GRANT CONNECT ON DATABASE db_name TO user2name; 3 #赋予各种操作权限 4 GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA schema_name TO user2name; 5 #赋予序列权限 6 GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name TO user2name; 7 #默认权限 8 ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT,INSERT,UPDATE,DELETE ON TABLES TO user2name; 9 ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT ALL PRIVILEGES ON SEQUENCES TO user2name;
最后修改某数据库的默认模式:
1 SET search_path TO schema_name; 2 ALTER database db_name SET search_path TO schema_name;
其他:
1 # 回收所有用户(public)在 public schema 上的 create 权限 2 REVOKE CREATE ON SCHEMA public FROM public;