My Life My Dream!

守信 求实 好学 力行
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PostgreSQL用户访问多个schema及其他常用命令

Posted on 2022-02-24 19:53  召冠  阅读(2577)  评论(0编辑  收藏  举报
PostgreSQL可以通过给用户授权并设置用户的 Search_path:访问的schema列表顺序
--## 设置访问路径(默认当前用户及public)
alter user tkk123 set search_path="$user", public;

--创建用户,需要密码
postgres=# create user tkk123 with password 'tkk123';

--## 授予指定架构下所有数据表及序列的权限
grant all privileges on all tables in schema public to tkk123;
grant all privileges on all sequences in schema public to tkk123;


--## 注意:上面的授权可能只对历史的一些对象授权,后期增加的对象是没有权限的,需要给个默认权限

--## 赋予默认数据表的权限
alter default privileges in schema public grant all privileges on tables to tkk123;

--## 赋予默认序列的权限
alter default privileges in schema public grant all privileges on sequences to tkk123;


--## 单独给用户,赋予访问数据库权限,schema权限
grant connect on database "testdb" to tkk123;
grant usage on schema tkk123 to tkk123;
alter schema tkk123 owner to tkk123;

--## 授予管理员权限
alter user tkk123 with superuser ;
alter user name rename to new_name


附注1:
SQL Server默认访问当前shema 及 权限范围的owner为dbo的对象(设置为sysdba权限后,默认访问dbo)
Oracle 用户和schema使用同一概念,MySQL数据库和Schema是同一概念,所以都不存在此问题。


附注2:
--## psql常用命令
psql -U username -d dbName
\l    列出所有数据库
\du   列出所有用户
\db   列出所有表空间
\dn   列出连接数据库中所有schema
\dt   列出连接数据库中所有表
\di   列出连接数据库中所有index
\dv   列出连接数据库中所有view
\h    sql命令帮助
\?    \ 所有命令帮助
\q    退出连接
\d tablename  列出指定tablename的表结构
\c dbName     切换数据库


附注3:
select version(), txid_current(), pg_backend_pid(), current_user, current_schema, current_timestamp;
select * from pg_catalog.pg_stat_activity psa ;

select * from pg_catalog.pg_database pd ;
select * from pg_catalog.pg_tablespace pt ;
select * from pg_catalog.pg_user pu ;
select * from pg_catalog.pg_namespace pn  ;  --# schema 
select * from pg_catalog.pg_class pc where pc.relkind in ('r');
select * from pg_catalog.pg_tables pt ;
select * from pg_catalog.pg_views pv ;
select * from pg_catalog.pg_sequences ps ;
select * from pg_catalog.pg_constraint pc ;
select * from pg_catalog.pg_indexes pi ;