Postgresql 賦予使用者許可權和撤銷許可權的例項
阿新 • • 發佈:2021-01-05
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;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。