我使用ansible 角色安装了 PostgreSQL。它的默认版本是10.6
. 如何设置另一个版本来安装?比如12.4
。
$ psql --version
psql (PostgreSQL) 10.6
我使用ansible 角色安装了 PostgreSQL。它的默认版本是10.6
. 如何设置另一个版本来安装?比如12.4
。
$ psql --version
psql (PostgreSQL) 10.6
我们希望使用 DMS 将 Oracle 数据库迁移到 RDS 中的 PostgreSQL 数据库。
在 PostgreSQL 的数据库中有一个官方的准备指南:
https://docs.aws.amazon.com/dms/latest/sbs/chap-oracle2postgresql.steps.configurepostgresql.html
当我使用 postgres 用户时 - 1
ALTER USER postgresql_dms_user WITH SUPERUSER;
得到
postgres=> ALTER USER postgresql_dms_user WITH SUPERUSER;
ERROR: must be superuser to alter superusers
当我授予 sct 用户时,得到 - 2
postgres=> GRANT ALL ON SEQUENCES IN SCHEMA main TO postgresql_sct_user;
ERROR: syntax error at or near "IN"
Line 1: GRANT ALL ON SEQUENCES IN SCHEMA main TO postgresql_sct_user...
1、AWS'Aurora PostgreSQL'postgres 用户不是超级用户
Role name | Group
postgres | {rds_superuser}
那么如何将超级用户授予新用户呢?
关于2,我在RDS中使用的是PostgreSQL 12版本,不支持语法吗?
我们正在使用 postgres 用户的远程连接在 AWS 上的 RDS 中设置 PostgreSQL 数据库。
数据库中有一个iam_ops
具有ops
角色的用户。如果在同一个 AWS 账户中使用它来将默认表权限设置为另一个规则readwrite
,这是可能的。
之后,如果以后ops
角色创建新表,iam_app_user
角色readwrite
可以使用它。
但是我们想通过 postgres 用户从远程服务器运行所有这些设置。由于该iam_ops
角色是由来自 RDS 的 IAM 身份验证使用的,因此似乎 postgres 用户无法像iam_ops
可以执行的那样执行授权任务。
CREATE USER iam_ops WITH LOGIN;
CREATE USER iam_app_user WITH LOGIN;
CREATE ROLE ops;
CREATE ROLE readwrite;
GRANT rds_iam TO iam_ops;
GRANT ops TO iam_ops;
GRANT readwrite TO iam_app_user;
GRANT rds_iam TO iam_app_user;
-- create and use a db
CREATE SCHEMA main;
GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON ALL TABLES IN SCHEMA main TO ops;
GRANT CREATE, USAGE ON SCHEMA main TO ops;
GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON ALL TABLES IN SCHEMA main TO readwrite;
GRANT USAGE ON SCHEMA main TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA main GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON TABLES TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA main FOR ROLE ops GRANT SELECT, INSERT, DELETE, UPDATE, TRUNCATE ON TABLES TO readwrite;
我认为 postgres 用户可以做任何事情。在这种情况下它有一些限制真的是事实吗?
当前角色
postgres=> \du
Role List
Role | Attribute | Group
----------------------+--------------------------------------------------------------------------+-------------------------------------------------------------
iam_app_user | | {rds_iam,readwrite}
iam_ops | | {rds_iam,ops}
ops | Can't login | {}
postgres | Can create role, database +| {rds_superuser}
rds_iam | Can't login | {}
rds_superuser | Can't login | {pg_monitor,pg_signal_backend,rds_replication,rds_password}
在 PostgreSQL 中,创建了这 2 个角色并授予它们不同的权限。
create user user1 with login;
create role operator;
grant operator to user1;
create user user2 with login;
create role readwrite;
grant readwrite to user2;
当 user1 创建表时,如table1
,user2 不能使用该表。它被拒绝了许可。
它是 PostgreSQL 的正确特性吗?如果是,如何使表也可以用于user2?
在用户下创建了这些表和序列postgres
:
表创建模式
SET search_path TO main;
CREATE TABLE table1 ...
CREATE TABLE table2 ...
CREATE TABLE table3 ...
序列创建模式
CREATE SEQUENCE main.seq1...
CREATE SEQUENCE main.seq2...
CREATE SEQUENCE main.seq3...
现在想将它们全部更改为另一个名为user1
. 如何在不重新创建这些对象的情况下使用它们?
如果在 linux 中使用 postgres,它有一个postgres
用户。所以当psql
从这个用户使用时,它会在这个用户下生成一个.psql_history
文件 - /home/postgres/.psql_history。
在 linux 服务器上设置很多用户时,他们都想psql
在他们的会话下使用/home/user1
. 如何让他们使用psql
并为他们每个人生成 psql 历史记录?
像这些
是否需要为每个用户安装 postgres 客户端?
我试过\ds
没有得到任何关系数据。
但我使用SELECT * FROM information_schema.sequences;
可以获取所有数据。
为什么不起作用\ds
?
用于psql -U postgres
登录。
postgres=> CREATE DATABASE mydb;
postgres=> \c mydb;
You are now connected to database "mydb" as user "postgres".
创建模式时,得到
mydb=> CREATE SCHEMA main;
ERROR: permission denied for database mydb
没有设置的可能被拒绝的权限是什么?
当我跑步时\l
,它显示
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------------------+----------+-------------+-------------+-----------------------------------------------
mydb | mydb_administrator | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/mydb_administrator +
| | | | | mydb_administrator=CTc/mydb_administrator
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
\du
得到
Role name | Attributes | Member of
----------------------+------------------------------------------------------------+-------------------------------------------------------------
mydb_administrator | | {rds_iam}
mydb_application | Cannot login | {}
mydb_user | | {rds_iam,mydb_application}
postgres | Create role, Create DB +| {rds_superuser}
| Password valid until infinity |
...
所有的事情都是由postgres
用户执行的。