返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Postgresql数据库角色创建登录详解
  • 405
分享到

Postgresql数据库角色创建登录详解

Postgresql角色创建登录Postgresql数据库 2023-02-21 12:02:25 405人浏览 独家记忆
摘要

目录角色创建可登录角色创建组角色角色 PG中使用角色(role)机制来解决用户身份认证。拥有登陆数据库权限的角色称之为可登录角色(login role)。一个角色可以继承其他角色的

角色

PG中使用角色(role)机制来解决用户身份认证。拥有登陆数据库权限的角色称之为可登录角色(login role)。一个角色可以继承其他角色的权限从而成为其成员角色;拥有成员角色的角色称为组角色。(一个组角色可以是另一个组角色的成员角色,并且这种角色之间的继承关系可以无限多层,但除非你非常有把握,否则别这么折腾自己)拥有登录权限的组角色称为可登录的组角色。然而,基于安全性的考虑,管理员呢一般是不会给组角色登陆权限的。一个角色还可以被授权于超级用户权限,但是此种授权要谨慎。

PG在最近的版本已经不再使用“用户”和“组”这两个术语,别人可能还会用,你就记住,用户代表可登录角色,组代表组角色就好。当然,PG为了保持前向兼容,create user和create group 这两个命令在当前版本中也是支持的,但与时俱进嘛,最好不要使用他们,请使用create role。

创建可登录角色

在PG安装的过程中的数据初始化阶段,系统是会默认创建一个名为postgres的可登录角色(同时会创建一个名为postgres的同名databases)。你可以通过前面文章介绍过的ident或者peer身份验证机制来将操作系统的root用户映射到数据库的postgres角色,这样就可以实现root用户免密登陆,当然或者通过设置trust模式的效果也是一样。数据库安装完成的第一件事就是用psql或者pgadmin工具以postgres角色身份登陆,然后创建其他已经规划好的角色。

?创建具备登陆权限的角色

CREATE ROLE leo LOGIN PASSWord 'mimajiushiwo'  VALID UNTIL  'infinity'  CREATEDB;

VALID子句是可选的,其功能是为此角色的权限设定的有效期,如果不写则该角色永久有效,CREATEDB 子句表明为此角色赋予了创建新数据库的权限。

?创建具备超级用户权限的角色

CREATE ROLE regina LOGIN PASSWORD 'queen' VALID UNTIL '2023-2-17 00:00' SUPERUSER;

上面的两个例子中我们创建的都是可登录的角色,如果创建不可登录的角色,省略掉LOGIN PASSWORD 子句既可。

创建组角色

一般是不应该授予组角色登录权限,但是你想,也不是不可以。

?以下的SQL创建组角色

CREATE ROLE zujuese INHERIT;

注意这个关键词INHERIT的用法。他表示组角色zujuese的任何一个成员角色都将自动继承其除“超级用户权限”外的所有权限。如果不写

INHERIT,默认也会有INHERIT的效果。

如果希望禁止组角色将其权限授予成员角色,加上NOINHERIT关键字。

?以下语句可以为组角色添加成员角色

GRANT zujuese TO leo;
GRANT zujuese TO regina;

我们之前提到过SUPERUSER超级用户权限是没有办法被继承的,然而成员角色却可以通过SET ROLE命令来实现“冒名顶替”其组角色的身份,从而获得其父角色所拥有的SUPERUSER权限,当然这种冒名顶替的状态是有期限的,仅限于当前会话存续期间有效。

举例如下:

我们呢先给zujuese超级用户权限:

ALTER ROLE zujuese SUPERUSER;

上面这个leo是zujuese的成员角色,也继承了绝大多数的权限,但leo登陆后依然不具备SUPERUSER权限。但是呢,我们只要执行以下语句就可以获得SUPERUSER权限:

SET ROLE zujuese;

我在下面才想明白这个问题:这个口令的意思是,leo扮演了zujuse在这个角色,虽然leo是zujuese的成员角色,但是superuser这个权限是没有被通过默认的赋权方式赋予的,此时set role一执行,就表示leo现在扮演了zujuese,所以才有了superuser权限

但是这种方式获得的SUPERUSER权限仅仅在会话存续期间有效。

虽然这个操作逻辑看起来好像很傻很呆 ,但是如果你不希望登录到以superuser身份犯下一些无法挽回的错误,那么这个方法是值得你考虑的。

所有的用户都可以使用SET ROLE这个命令,但是还有一个比它更加强大的命令:SET SESSioN AUTHORIZATION ,该命令只允许具备superuser权限的用户执行。为了便于理解呢,我们先介绍两个postgresql中的全局变量:current_user和session_user。执行下面的语句,我们就可以看到在这两个变量值。

SELECT session_user ,current_user;

首次登陆后,这两个值相同。执行set role就会修改current_user的值,要是执行SET SESSION AUTHORIZATION 就会同时改变current_user和session_user的值。

以下是set role命令的主要特点。

  • set role无须superuser 权限既可执行。
  • set role会修改current_user变量的值,但不会修改session_user的值。
  • 一个具备superuser权限的session_user同名角色可以通过set role设置为任何用户。
  • 非超级用户可以通过set role 设置为session_user同名角色或者其所属的组用户。
  • set role命令可以让执行角色获取到所“扮演”角色的全部权限,当然除了,set role 和SET SESSION AUTHORIZATION权限。

SET SESSION AUTHORIZATION是比set role 更为强大的命令,其关键特性如下:

  • 只有超级用户才可以执行SET SESSION AUTHORIZATION
  • SET SESSION AUTHORIZATION在整个会话存续期间都是有效的,也就是说及时超级用户通过SET SESSION AUTHORIZATION来扮演了一个非超级用户,只要会话未中断,都可以在上面再次执行SET SESSION AUTHORIZATION命令的。
  • SET SESSION AUTHORIZATION会将current_user和session_user修改为要扮演的角色。
  • 具备超级用户权限的session_user同名角色可以通过set role 来扮演任何其他角色。

下面呢,我们就展示一波:

?

psql -U leo -d postgres
SELECT session_user ,current_user;

 set role zujuese; 
SELECT session_user ,current_user;

alter role leo superuser;
set role regina ;
SELECT session_user ,current_user;

set session authorization regina;

为啥这个不成功呢,这就是我们上面说的set role的特点,是有了全部权限,但是set role和set session authorization权限是没有的。

所以我们退出后,再用leo登陆:

这说明什么呢,这说明我们上次扮演的时候给我们赋予的superuser权限是会话结束还是生效的

所以我们这波set session authorization直接就是成功了。

以上就是Postgresql数据库角色创建登录详解的详细内容,更多关于Postgresql角色创建登录的资料请关注编程网其它相关文章!

--结束END--

本文标题: Postgresql数据库角色创建登录详解

本文链接: https://lsjlt.com/news/196939.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Postgresql数据库角色创建登录详解
    目录角色创建可登录角色创建组角色角色 PG中使用角色(role)机制来解决用户身份认证。拥有登陆数据库权限的角色称之为可登录角色(login role)。一个角色可以继承其他角色的...
    99+
    2023-02-21
    Postgresql角色创建登录 Postgresql数据库
  • Postgresql数据库角色创建登录的方法是什么
    本篇内容主要讲解“Postgresql数据库角色创建登录的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postgresql数据库角色创建登录的方法是什么”吧!角色PG中使用角色(ro...
    99+
    2023-07-05
  • PostgreSQL数据库角色(五)
            使用角色的概念管理数据库访问权限。     角色可以是数据库用户和一组数据库用户...
    99+
    2024-04-02
  • mysql数据库角色如何创建
    今天小编给大家分享一下mysql数据库角色如何创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • postgresql怎么创建数据库
    要在PostgreSQL中创建数据库,可以使用CREATE DATABASE语句。例如,要创建一个名为"mydatabas...
    99+
    2024-04-22
    postgresql
  • 怎么在postgresql中创建数据库
    在postgresql中创建数据库的方法:1.启动postgresql服务;2.登录postgresql数据库;3.使用createdb命令创建;具体步骤如下:首先,在命令行中启动postgresql服务;net start postgre...
    99+
    2024-04-02
  • 如何在PostgreSQL中创建数据库
    要在PostgreSQL中创建数据库,可以使用以下命令: 使用超级用户登录到PostgreSQL数据库: psql -U pos...
    99+
    2024-04-09
    PostgreSQL
  • 云数据库PostgreSQL创建参数模板
    创建参数模板可以帮助我们在创建数据库实例时快速配置参数,提高数据库的性能和安全性。以下是创建云数据库PostgreSQL参数模板的步...
    99+
    2023-09-21
    数据库
  • Python 中创建 PostgreSQL 数据库连接池
    目录习惯于使用数据库之前都必须创建一个连接池,即使是单线程的应用,只要有多个方法中需用到数据库连接,建立一两个连接的也会考虑先池化他们。连接池的好处多多, 1) 如果反复创...
    99+
    2024-04-02
  • mysql数据库怎么使用创建的账号登录
    使用 mysql 账号登录需要以下步骤:连接到 mysql 服务器并输入账号和密码。输入密码以连接到 mysql 服务器。成功连接后,可执行创建数据库、插入数据、运行查询等操作。使用命令...
    99+
    2024-04-14
    mysql
  • PostgreSQL中怎么创建和管理数据库
    要在PostgreSQL中创建和管理数据库,可以按照以下步骤进行操作: 创建数据库: 可以使用以下命令在PostgreSQL中创建...
    99+
    2024-04-02
  • Mysql匿名登录无法创建数据库问题解决方案
    常见问题 Access denied for user ''@'localhost' to database 'web02' //web02是我自己创建的数据库 原因分析:mysql数据库的user表里,存在用户名为...
    99+
    2022-05-13
    Mysql 匿名登录 创建数据库
  • 阿里云数据库登录方法详解
    阿里云数据库是阿里云推出的一种云计算数据库服务,它提供了多种登录方式,包括通过用户名和密码进行登录、通过密钥对进行登录、通过自建数据库服务器进行登录等。本文将详细介绍阿里云数据库的登录方法。 一、通过用户名和密码进行登录阿里云数据库的用户名...
    99+
    2023-11-10
    阿里 详解 数据库
  • PostgreSQL中如何使用create database创建数据库
    这篇文章将为大家详细讲解有关PostgreSQL中如何使用create database创建数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、create database语法格式CREATE&nb...
    99+
    2023-06-14
  • PostgreSQL中如何创建一个新的数据库
    要在PostgreSQL中创建一个新的数据库,可以使用以下命令: CREATE DATABASE dbname; 其中,dbnam...
    99+
    2024-04-09
    PostgreSQL
  • postgresql数据库|数据库实操----表复制详解
    前言: 通常情况下,我们对数据库的增删改查的时候,为了确保数据的安全,需要备份表,那么,一种方法是通过pg_dump 这个工具做SQL转储操作,此方法比较复杂,麻烦,但十分的安全,可靠性也基本是百分百,但对于大表备份,十分耗时并且可能有锁表...
    99+
    2023-10-27
    数据库 postgresql mysql oracle 运维
  • Docker启动PostgreSQL时创建多个数据库的解决方案
    1 前言 在文章《Docker启动PostgreSQL并推荐几款连接工具》中我们介绍如何通过Docker来启动PostgreSQL,但只有一个数据库,如果想要创建多个数据库在同一个D...
    99+
    2024-04-02
  • 如何创建一个新的数据库在PostgreSQL中
    要在PostgreSQL中创建一个新的数据库,可以使用以下步骤: 打开命令行界面或者使用图形用户界面工具连接到PostgreSQ...
    99+
    2024-04-09
    PostgreSQL
  • 如何在PostgreSQL数据库中创建和使用索引
    在PostgreSQL数据库中,可以通过以下步骤来创建和使用索引: 创建索引: 使用CREATE INDEX语句可以在表上创建索引...
    99+
    2024-04-02
  • 如何利用SQL语句创建数据库详解
    目录前言建立数据库总结前言 SQL语言是集DDL、DML和DCL于一体的数据库语言 SQL语言主要由以下9个单词引导的操作语句来构成,但每一种语句都能表达复杂的操作请求 DDL语句引导词:Create(建立),Alter...
    99+
    2022-06-16
    sql语句创建数据库用户 sql如何创建数据库 sql语句创建数据库步骤
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作