1. 程式人生 > 資料庫 >Postgresql 賦予使用者許可權和撤銷許可權的例項

Postgresql 賦予使用者許可權和撤銷許可權的例項

1、對資料庫授權

postgresql 授權某個資料庫的許可權給wang 賬號 使該賬號 只能操作指定DB 不能操作其他DB

alter user wang set default_transaction_read_only=on;
grant all on database test to wang;
grant select on all database test to wang;
grant select on all tables in schema public to wang;   // 起作用的是這句 要進入資料庫test 操作,在那個db環境執行就授哪個db的權

配置許可權

ve=# grant all on schema public to foo ;
ve=# grant select,insert,update,delete on test to foo ;
ve=# grant select,delete on public.test to foo ;

對錶授權

撤銷授權

撤銷對資料庫授權

revoke all on database company from wang;   #撤銷使用者wang對資料庫company 的所有許可權
revoke select on all tables in schema public from wang; 

撤銷對錶授權

對當前庫中所有表去掉public的所有訪問許可權,為了確保除了所有者之外的洽談使用者不能操作這些表。

lyy=# revoke all on test1 from public;
REVOKE
lyy=# revoke all on test2 from public;
REVOKE

去掉對pg_class的訪問許可權,為了確保yy使用者不能看到所有表名的列表。

lyy=# revoke all on pg_class from public;
REVOKE
lyy=# revoke all on pg_class from yy;
REVOKE

新增yy使用者對test1表的所屬關係,確保yy使用者對test1表有許可權操作

lyy=# ALTER TABLE test1 OWNER TO yy; 
lyy=# \q

使用者管理

/* 賦給使用者表的所有許可權 */
GRANT ALL ON tablename TO user; 
/* 賦給使用者資料庫的所有許可權 */
GRANT ALL PRIVILEGES ON DATABASE dbname TO dbuser;

/* 撤銷使用者許可權 */
REVOKE privileges ON tablename FROM user;

資料庫操作

/* 建立資料庫 */
create database dbname; 

/* 刪除資料庫 */
drop database dbname; 

表操作

/* 增加讓主鍵自增的許可權 */
grant all on sequence tablename_keyname_seq to webuser;

 /* 重新命名一個表 */
alter table [表名A] rename to [表名B]; 

/* 刪除一個表 */
drop table [表名]; 

/* 在已有的表裡新增欄位 */
alter table [表名] add column [欄位名] [型別]; 

/* 刪除表中的欄位 */
alter table [表名] drop column [欄位名]; 

/* 重新命名一個欄位 */
alter table [表名] rename column [欄位名A] to [欄位名B]; 

/* 給一個欄位設定預設值 */
alter table [表名] alter column [欄位名] set default [新的預設值];

/* 去除預設值 */
alter table [表名] alter column [欄位名] drop default; 

/* 插入資料 */
insert into 表名 ([欄位名m],[欄位名n],......) values ([列m的值],[列n的值],......); 

/* 修改資料 */
update [表名] set [目標欄位名]=[目標值] where ...; 

/* 刪除資料 */
delete from [表名] where ...; 

/* 刪除表 */
delete from [表名];

/* 查詢 */
SELECT * FROM dbname WHERE ...;

/* 建立表 */
create table (
  [欄位名1] [型別1] primary key,

參考

建立使用者和資料庫

建立使用者

postgres=# create user username with password '****';

建立資料庫

postgres=# create database dbtest owner username; -- 建立資料庫指定所屬者

將資料庫得許可權,全部賦給某個使用者

postgres=# grant all on database dbtest to username; -- 將dbtest所有許可權賦值給username

匯入整個資料庫

psql -U username databasename < /data/dum.sql -- 使用者名稱和資料庫名

常見報錯 :

1、切換yy使用者失敗

lyy=# \c - yy
FATAL: Peer authentication failed for user "yy"
Previous connection kept

2、使用者yy連線lyyku會報錯

psql -E -U yy -d lyy
Password for user yy:
psql: FATAL: permission denied for database "lyy"
DETAIL: User does not have CONNECT privilege.

原因 :沒有connect許可權,那麼就授予使用者yy對資料庫lyy的訪問許可權

解決辦法 :

#grant connect on database lyy to yy; 

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。