如何使用 PG 数据库的 GRANT 命令? (pg 数据库grant)

在 PostgreSQL 数据库管理中,GRANT 命令是一个非常强大的工具,使用它可以授予用户对数据库对象的权限,也可以控制数据库对象的可用性。在本文中,我们将讨论如何使用 GRANT 命令,并深入了解授权的不同类型、授权的基本语法以及如何重新撤销授权。

先让我们明确一些基本概念。在 PostgreSQL 中,用户被授权对一个对象(例如表、函数、架构等)执行一个特定的操作。操作类型包括 SELECT、INSERT、UPDATE 和 DELETE。授予权限的命令就是 GRANT。另一个相关的命令是 REVOKE,它相当于撤销 GRANT 命令的功能。

语法

GRANT 的基本语法如下:

“`sql

GRANT { privilege [, …] } ON { object [, …] }

TO { grantee [, …] } [ WITH [ GRANT ] OPTION ]

“`

在上述语法中,“privilege“ 表示要授予的操作。例如,SELECT、INSERT、UPDATE、DELETE 和 REFERENCES 等。“object“ 是指要授予权限的数据库对象的名称,可以使表、视图、函数等。“grantee“ 表示接收权限的用户或角色的名称;多个用户或角色可以用逗号分隔。WITH OPTION 意味着允许被授权者将授权传递给其他用户或角色。

授权的类型

在 PostgreSQL 中,可以授予三种类型的权限:对象级权限、架构级权限和数据库级权限。

对象级权限针对特定的表、视图或序列。授予对象级权限时,可以指定控制同一对象的不同操作的不同权限。例如,你可以给用户授予 SELECT 以及 INSERT 权限,但不授予 ALTER 和 DROP 权限。

架构级权限由于干扰范围很大,被称为“更大权限”。架构级权限授予了某个角色或用户对指定架构的访问权限。如果你授予一个角色架构级权限,那么这个角色就可以访问这个架构中的所有对象。

最后是数据库级权限。数据库级权限涵盖了整个数据库。例如,如果你授予某个角色 CREATE 权限,那么这个角色就可以创建新的对象

常见的授权场景

现在,让我们看一些常见的授权场景。

之一种授权

这是一种最基本的授权。假设你想授予所有人对一个表执行 SELECT 操作的权限:

“`sql

GRANT SELECT ON table_name TO public;

“`

上述命令将授予“public”组可以对“table_name”表执行 SELECT 操作的权限。

第二种授权

假设你想授予特定的用户,例如“user_1”,对表执行不止一个操作的权限。可以将许多命令合并为一个:

“`sql

GRANT SELECT,INSERT,UPDATE,DELETE

ON table_name

TO user_1;

“`

第三种授权

假设你不只想授予一个用户对特定表的权限,而是想授予一个角色对该表的权限。在这种情况下,作为更佳实践,通常是定义一个角色,将用户添加到该角色中,然后对该角色授予权限。

使用 CREATE ROLE 命令创建一个新的角色。对于本例,我们可以将该角色命名为“role_name”:

“`sql

CREATE ROLE role_name;

“`

接下来,使用 GRANT 命令授予该角色对表执行 SELECT、INSERT、UPDATE 和 DELETE 操作的权限:

“`sql

GRANT SELECT,INSERT,UPDATE,DELETE

ON table_name

TO role_name;

“`

现在,将“user_1”添加到“role_name”角色中:

“`sql

GRANT role_name TO user_1;

“`

到目前为止,我们已经了解了授权的不同类型、授权的基本语法以及一些常见的授权场景。让我们简单讨论一下撤销授权的方法。

撤销授权

REVOKE 命令用于撤销 GRANT 命令。下面是语法:

“`sql

REVOKE { privilege [, …] } ON { object [, …] }

FROM { grantee [, …] }

“`

在上述程序中,“privilege”、“object”和“grantee”都有类似于授权语法中的定义。如果你要撤销对同一对象的多个权限,可以在撤销命令中列出所有这些权限的名称。

结论

PostgreSQL 是一个功能强大、可扩展和开源的关系型数据库管理系统。其中 GRANT 命令是 PostgreSQL 中非常强大的授权工具,它可以授予用户对数据库对象的权限,也可以控制数据库对象的可用性。在本文中,我们了解了授权的不同类型、授权的基本语法以及一些常见的授权场景和撤销授权的方法。我们希望这篇文章能够帮助您更好地使用 PostgreSQL 数据库的 GRANT 命令。

相关问题拓展阅读:

安装postgre sql时跳出langid怎么解决

安装postgre sql时跳出langid解决方法:

一、安装

首先,安装PostgreSQL客户端。

sudo apt-get install postgresql-client

然后,安装PostgreSQL服务器。

sudo apt-get install postgresql

正常情况下,安装完成后,PostgreSQL服务器会自动在本机的5432端口开启。

如果还想安装图形管理界面,可以运行下面命令,但是本文不涉及这方面内容。

sudo apt-get install pgadmin3

二、添加新用户和新数据库

初次安装后,默认生成一个名为postgres的数据库和一个名为含搭配postgres的数据库用户。这里需要注意的是,同时还生成了一个名为postgres的Linux系统用户。

下面,我们使用postgres用户,来生成其他用户和新数据库。好几种方法可以达到这个目的,这里介绍两种。

之一种方法,使用PostgreSQL控制台。

首先,新建一个Linux新用户,可以取你想要的名字,这里为dbuser。

sudo adduser dbuser

然后,切换到postgres用户。

sudo su – postgres

下一步,使用psql命令谈指登录PostgreSQL控制台。

psql

这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为”postgres=#”,表示这时已经进入了数据库控制台。以下的命令都在控制台内完成。

之一件事是使用\password命令,为postgres用户设置一个密码。

\password postgres

第二件事是创建数据库用户dbuser(刚才创建的是Linux系统用户),并设置密码。枝租

CREATE USER dbuser WITH PASSWORD ‘password’;

第三件事是创建用户数据库,这里为exampledb,并指定所有者为dbuser。

CREATE DATABASE exampledb OWNER dbuser;

第四件事是将exampledb数据库的所有权限都赋予dbuser,否则dbuser只能登录控制台,没有任何数据库操作权限。

GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;

最后,使用\q命令退出控制台(也可以直接按ctrl+D)。

\q

第二种方法,使用shell命令行。

添加新用户和新数据库,除了在PostgreSQL控制台内,还可以在shell命令行下完成。这是因为PostgreSQL提供了命令行程序createuser和createdb。还是以新建用户dbuser和数据库exampledb为例。

首先,创建数据库用户dbuser,并指定其为超级用户。

sudo -u postgres createuser –superuser dbuser

然后,登录数据库控制台,设置dbuser用户的密码,完成后退出控制台。

sudo -u postgres psql

\password dbuser

\q

接着,在shell命令行下,创建数据库exampledb,并指定所有者为dbuser。

sudo -u postgres createdb -O dbuser exampledb

三、登录数据库

添加新用户和新数据库以后,就要以新用户的名义登录数据库,这时使用的是psql命令。

psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432

上面命令的参数含义如下:-U指定用户,-d指定数据库,-h指定服务器,-p指定端口。

输入上面命令以后,系统会提示输入dbuser用户的密码。输入正确,就可以登录控制台了。

psql命令存在简写形式。如果当前Linux系统用户,同时也是PostgreSQL用户,则可以省略用户名(-U参数的部分)。举例来说,我的Linux系统用户名为ruanyf,且PostgreSQL数据库存在同名用户,则我以ruanyf身份登录Linux系统后,可以直接使用下面的命令登录数据库,且不需要密码。

psql exampledb

此时,如果PostgreSQL内部还存在与当前系统用户同名的数据库,则连数据库名都可以省略。比如,假定存在一个叫做ruanyf的数据库,则直接键入psql就可以登录该数据库。

psql

另外,如果要恢复外部数据,可以使用下面的命令。

psql exampledb

四、控制台命令

除了前面已经用到的\password命令(设置密码)和\q命令(退出)以外,控制台还提供一系列其他命令。

\h:查看SQL命令的解释,比如\h select。

\?:查看psql命令列表。

\l:列出所有数据库。

\c :连接其他数据库。

\d:列出当前数据库的所有表格。

\d

:列出某一张表格的结构。

\du:列出所有用户。

\e:打开文本编辑器。

\conninfo:列出当前数据库和连接的信息。

五、数据库操作

基本的数据库操作,就是使用一般的SQL语言。

# 创建新表

CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);

# 插入数据

INSERT INTO user_tbl(name, signup_date) VALUES(‘张三’, ”);

# 选择记录

SELECT * FROM user_tbl;

# 更新数据

UPDATE user_tbl set name = ‘李四’ WHERE name = ‘张三’;

# 删除记录

DELETE FROM user_tbl WHERE name = ‘李四’ ;

# 添加栏位

ALTER TABLE user_tbl ADD email VARCHAR(40);

# 更新结构

ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;

# 更名栏位

ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;

# 删除栏位

ALTER TABLE user_tbl DROP COLUMN email;

# 表格更名

ALTER TABLE user_tbl RENAME TO backup_tbl;

# 删除表格

linux怎么用命令登陆postgres

(1)用户实用程序:

createdb 创建一个新的PostgreSQL的数据库(和SQL语句:CREATE DATABASE 相同)

createuser 创建一个新的PostgreSQL的用户(和SQL语句:CREATE USER 相同)

dropdb 删除数据库

dropuser 删除穗空用户

pg_dump 将PostgreSQL数据库导出到一个脚本文件

pg_dumpall 将所有的PostgreSQL数据库导出到一个脚本文件

pg_restore 从一个由pg_dump或pg_dumpall程序导出的脚本文件中恢复PostgreSQL数据库

psql 一个基于命令行的PostgreSQL交互式客户端程序

vacuumdb 清理和分析一个PostgreSQL数据库,它是客户端程序psql环境下SQL语句VACUUM的shell脚本封装,二者功能完全相同

(2)系统实用程序

initdb 创建一个用于存储数据库的PostgreSQL数据目录,并创建预定义的模板数据库template0和游族困template1,生成共享目录表 catalog;此程序通常只在安装PostgreSQL时运行一次

initlocation 创建一个辅助的PostgreSQL数据库存储区域

ipcclean 从停止的PostgreSQL服务器中清神念除共享内在和孤立信号标志

pg_ctl 启动、停止、重启PostgreSQL服务(比如:pg_ctl start 启动PostgreSQL服务,它和service postgresql start相同)

pg_controldata 显示PostgreSQL服务的内部控制信息

postgres PostgreSQL单用户模式的数据库服务

postmaster PostgreSQL多用户模式的数据库服务

4.这里面最重要的是psql这个客户端程序最为重要。启用客户端程序psql的方法是:

切换到PostgreSQL预定义的数据库超级用户postgres,启用客户端程序psql,并连接到自己想要的数据库,比如说:

psql template1

出现以下界面,说明已经进入到想要的数据库,可以进行想要的操作了。

template1=#

5.在数据库中的一些命令:

template1=# \l 查看系统中现存的数据库

template1=# \q 退出客户端程序psql

template1=# \c 从一个数据库中转到另一个数据库中,如template1=# \c sales 从template1转到sales

template1=# \dt 查看表

template1=# \d 查看表结构

template1=# \di 查看索引

========================

*创建数据库:

create database ;

*查看数据库列表:

\d

*删除数据库:

drop database ;

创建表:

create table ( ;, ,……;);

*查看表名列表:

\d

*查看某个表的状况:

\d

*重命名一个表:

alter table rename to ;

*删除一个表:

drop table ;

========================================

==========================

*在已有的表里添加字段:

alter table add column ;

*删除表中的字段:

alter table drop column ;

*重命名一个字段:

alter table rename column to ;

*给一个字段设置缺省值:

alter table alter column set default ;

*去除缺省值:

alter table alter column drop default;

在表中插入数据:

insert into 表名 (,,……) values (,,……);

修改表中的某行某列的数据:

update set = where ;

删除表中某行数据:

delete from where ;

delete from ;–删空整个表

6.要注意随时对数据库进行清理、收回磁盘空间并更新统计信息,使用下面的命令就搞定!

vaccumdb -d sales -z

-a 对所有的数据库操作

-z 保证不断地删除失效的行,节约磁盘空间,将统计信息更新为最近的状态

7.PostgreSQL用户认证

PostgreSQL数据目录中的pg_hba.conf的作用就是用户认证,可以在/var/lib/pgsql/data中找到。

有以下几个例子可以看看:

(1)允许在本机上的任何身份连接任何数据库

TYPE DATABASEUSER IP-ADDRESS IP-MASK METHOD

local allall trust(无条件进行连接)

(2)允许IP地址为192.168.1.x的任何主机与数据库sales连接

TYPE DATABASEUSER IP-ADDRESS IP-MASK METHOD

host salesall.168.1..255.255.0 ident sameuser(表明任何操作系统用户都能够以同名数据库用户进行连接)

8.看了那么多,来一个完整的创建PostgreSQL数据库用户的示例吧

(1)进入PostgreSQL高级用户

(2)启用客户端程序,并进入template1数据库

psql template1

(3)创建用户

template1=# CREATE USER hellen WITH ENCRYPED PASSWORD’zhenzhen’

(4)因为设置了密码,所以要编辑pg_hba.conf,使用户和配置文件同步。

在原有记录上面添加md5

local all hellen md5

(4)使用新用户登录数据库

template1=# \q

psql -U hellen -d template1

PS:在一个数据库中如果要切换用户,要使用如下命令:

template1=# \!psql -U tk -d template1

9.设定用户特定的权限

还是要用例子来说明:

创建一个用户组:

sales=# CREATE GROUP sale;

添加几个用户进入该组

sales=# ALTER GROUP sale ADD USER sale1,sale2,sale3;

授予用户级sale针对表employee和products的SELECT权限

sales=# GRANT SELECT ON employee,products TO GROUP sale;

在sale中将用户user2删除

sales=# ALTER GROP sale DROP USER sale2;

10.备份数据库

可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库:

如何用sqlyog实现远程连接mysql

1,sqlyog客户端,用root用户远程链接mysql时,提示“访问被拒绝”,镇败在网上搜索了一下原因。  原来是mysql没有授权其远程链接,所以你只能在客户端里面链接。  怎么解决呢?  原表数据  mysql> use mysql  mysql>喊梁 select Host,User,Password from user ;  +-++-+  | Host | User | Password |  +-++-+  | localhost | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | www | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | 127.0.0.1 | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | ::1 | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  创建一个新用户  格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by “用户密码”;  grant select,update,insert,delete on *.* to identified by “komiles1234”;  执行完上面语句后,再执行  mysql> select Host,User,Password from user ;  +-++-+  | Host | User | Password |  +-++-+  | localhost | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | www | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | 127.0.0.1 | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | ::1 | root | *DEA65ABECC50A1FEBD9C0D0D9045E0DDB312F38F |  | 123.4.56.89 | komiles | *50663F1ECEAB844897BC272EC1AE7E83F442F649 |  +-++-+  此时,就可以用你刚才创建的用户进行远程访问了。  以下是转载

  2、实现远程连接(授权法)  将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。  update user set host = ’%’ where user = ’root’;  将权限改为ALL PRIVILEGES  mysql>御渗颤 use mysql;  Database changed  mysql> grant all privileges on *.* to root@’%’ identified by “root”;  Query OK, 0 rows affected (0.00 sec)  mysql> select host,user,password from user;  ++——+-+  | host| user | password |  ++——+-+  | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |  | 192.168.1.12 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |  | %| root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |  ++——+-+  3 rows in set (0.00 sec)  这样机器就可以以用户名root密码root远程访问该机器上的MySql.  3、实现远程连接(改表法)  use mysql;  update user set host = ‘%’ where user = ‘root’;  这样在远端就可以通过root用户访问Mysql.

通过SQLyog来连接MySQL

(1) 执行File→New connection菜单命令。将打开连接提示对话框。单击New按钮,将创建一个新的连接,给并毁新连接定义一个名字”zyj”

(2) 单击OK按钮,在MySQL的设置窗体输入相关的数据。注意Port是安装MySQL时默认的访问端口,如果安装时未修改,则默认值为3306。

(3) 当单击Test Connection按钮时,将弹出Connection Info对话厅蔽困框。如果提示连接失败,请确定输入的用户名、密码或端口号是否正确。

(4) 当单击”确定”按钮后,就完成了SQLyog与MySQL的连接。接下来就可以通过SQLyog来进行MySQL的相关操作扮念了

$CFG->dbtype = ‘mysqli’; // ‘pgsql’, ‘mariadb’, ‘尘洞mysqli’, ‘mssql’, ‘sqlsrv’ or ‘oci’

$CFG->dblibrary = ‘native’派绝枯; //宏乱 ‘native’ only at the moment

$CFG->dbhost = ‘localhost’; // eg ‘localhost’ or ‘db.isp.com’ or IP

$CFG->dbname = ‘moodle’; // database name, eg moodle

$CFG->dbuser = ‘root’; // your database username

$CFG->dbpass = ‘123456’; // your database password

$CFG->prefix = ‘mdl_’;// prefix to use for all table names

pg 数据库grant的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于pg 数据库grant,如何使用 PG 数据库的 GRANT 命令?,安装postgre sql时跳出langid怎么解决,linux怎么用命令登陆postgres,如何用sqlyog实现远程连接mysql的信息别忘了在本站进行查找喔。


数据运维技术 » 如何使用 PG 数据库的 GRANT 命令? (pg 数据库grant)