postgresql|base de datos|administración de roles (usuario) --- la diferencia entre autorización y desautorización y uso y selección de permisos

Prefacio:

Postgresql es una base de datos relacional de servicio pesado relativamente compleja.Ya sea que se trate de instalación e implementación o de operación y mantenimiento posteriores, todavía hay muchos detalles a los que se debe prestar atención.

Por ejemplo, la distribución razonable de derechos de uso, entonces, ¿cuál es la distribución razonable de derechos? Naturalmente, es el principio de minimizar la autoridad, lo que significa que cada usuario puede completar el trabajo dentro del alcance de la autoridad sin causar riesgos de seguridad debido a ataques de piratas informáticos, lagunas y otras razones.

Antes de escribir este artículo, es solo una cuestión de empoderar a algunos usuarios comunes de manera casual, y ese trabajo de administración obviamente no es suficiente. Por lo tanto, este artículo hará una comparación relativa entre el empoderamiento y la desautorización de usuarios en la base de datos postgresql. Un resumen completo y un ejemplo para ilustrar la diferencia entre el permiso de uso y el permiso de selección.

uno,

¿Cuáles son los permisos del usuario?

SELECCIONAR: este permiso se usa para consultar tablas o ciertas columnas en tablas, vistas o secuencias.
INSERTAR: este permiso permite insertar datos en una tabla o vista, o usar COPY FROM para insertar datos.
ACTUALIZAR: este permiso permite la operación de actualización en la tabla o columnas o vistas específicas en la tabla.
ELIMINAR: Este permiso permite la operación de eliminación de datos en la tabla o vista.
TRUNCATE: Permite vaciar la tabla.
REFERENCIAS: Permite crear restricciones de clave externa en la columna de referencia y la columna referenciada.
TRIGGER: Permite la creación de triggers sobre tablas.
CREAR: Para la base de datos, se permite crear un Esquema en la base de datos; para el Esquema, se permite crear un objeto de base de datos en el Esquema; para el espacio de tabla, se permite especificar la tabla o el índice correspondiente espacio de mesa
CONECTAR: permite al usuario conectarse a la base de datos especificada.
TEMPORAL o TEMP: Permite la creación de tablas temporales al especificar una base de datos.
EJECUTAR: Permite la ejecución de una función.
USO: para lenguajes de programación, se permite usar el lenguaje de programación especificado para crear funciones; para esquemas, se permite buscar objetos bajo el esquema (excluyendo objetos recién creados después de la autorización); para secuencias, se permite usar currval y funciones nextval ;Para contenedores externos, permite el uso de contenedores externos para crear servidores externos; para servidores externos, permite la creación de tablas externas.
TODOS LOS PRIVILEGIOS: indica una concesión única de permisos que se pueden conceder.

De acuerdo, agregar, eliminar, modificar y verificar significa que seleccionar, actualizar, insertar, eliminar y usar deben clasificarse en una categoría, y seleccionar y usar son muy similares, al menos bajo el esquema, los dos son básicamente lo mismo, pero debe tenerse en cuenta que, para nuevos objetos después de la autorización, como nuevas tablas, el uso no está autorizado para consultar, y seleccionar obviamente no tiene tales problemas.

dos,

Autorización de usuario de solo lectura correcta

1,

El primer tipo de empoderamiento

uso---derecho de uso + derecho de consulta de selección

Primero cree el esquema relevante llamado mytest y el rol relevante llamado prueba

test=# \c test
You are now connected to database "test" as user "postgres".
test=# create schema mytest;
CREATE SCHEMA
test=# \du
                                        List of roles
     Role name      |                         Attributes                         | Member of 
--------------------+------------------------------------------------------------+-----------
 drmc               |                                                            | {}
 pg1                | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 pms30              | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres           | Superuser                                                  | {}
 postgres_exporter  |                                                            | {}
 postgres_exporter1 |                                                            | {}
 power_common       |                                                            | {}
 power_tf           |                                                            | {}
 zsk                |                                                            | {}
test=# create user test with password '123456';
CREATE ROLE

Empoderamiento:

test=# grant USAGE on SCHEMA mytest to test;
GRANT
test1=> grant SELECT on ALL tables in schema mytest to test;

La prueba no se demostrará, pero se debe tener en cuenta que hay dos autorizaciones, uso y selección, ambas indispensables, es decir, ¡debe haber dos comandos! ! ! ! !

Bien, lo anterior es la prueba de usuario facultada para seleccionar el esquema mytest en la base de datos de prueba. A continuación, para continuar con la prueba, elimine al usuario de prueba.

2,

Eliminar a la fuerza a los usuarios autorizados

OK, se informó un error al eliminar, lo que deja a la gente bastante boquiabierta. El informe de error decía que la base de datos llamada prueba tiene 5 objetos que dependen de la prueba del usuario, pero aún hay una solución.

postgres=# drop user test;
2023-08-09 01:15:34.031 CST [14975] ERROR:  role "test" cannot be dropped because some objects depend on it
2023-08-09 01:15:34.031 CST [14975] DETAIL:  5 objects in database test
2023-08-09 01:15:34.031 CST [14975] STATEMENT:  drop user test;
ERROR:  role "test" cannot be dropped because some objects depend on it
DETAIL:  5 objects in database test

Forzar eliminación:

Se requieren tres comandos, reasignar, quitar propietario y quitar usuario, todos indispensables.

postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# \dn
List of schemas
  Name  | Owner 
--------+-------
 mytest | test
 public | pg1
(2 rows)

test=# REASSIGN OWNED BY test TO postgres;
REASSIGN OWNED
test=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 mytest | postgres
 public | pg1
(2 rows)
test=# drop owned BY test cascade;
NOTICE:  drop cascades to 4 other objects
DETAIL:  drop cascades to table mytest.dept
drop cascades to table mytest.emp
drop cascades to table mytest.bonus
drop cascades to table mytest.salgrade
DROP OWNED

OK, consulta si se elimina la prueba de usuario:

Se puede ver que efectivamente no hay más, y las personas con trastorno obsesivo-compulsivo se encuentran muy cómodas.

Sin embargo, se debe prestar especial atención al hecho de que la eliminación forzada de usuarios es una eliminación en cascada, por lo que existe una alta probabilidad de que el esquema y la tabla dependientes se eliminen, por lo que es necesario respaldar este método de eliminación forzada de usuarios. arriba de antemano para evitar accidentes .

test1=# \du+
                                               List of roles
     Role name      |                         Attributes                         | Member of | Description 
--------------------+------------------------------------------------------------+-----------+-------------
 drmc               |                                                            | {}        | 
 pg1                | Superuser, Create role, Create DB, Replication, Bypass RLS | {}        | 
 pms30              | Superuser, Create role, Create DB, Replication, Bypass RLS | {}        | 
 postgres           | Superuser                                                  | {}        | 
 postgres_exporter  |                                                            | {}        | 
 postgres_exporter1 |                                                            | {}        | 
 power_common       |                                                            | {}        | 
 power_tf           |                                                            | {}        | 
 zsk                |                                                            | {}        | 

3,

segundo empoderamiento

concesión select+ propietario

test=# create user test with password '123456';
CREATE ROLE
test=# \c
You are now connected to database "test" as user "postgres".
test=# grant SELECT on ALL tables in schema mytest to test;
GRANT
test=# set search_path to mytest ;
SET
test=# alter schema mytest owner to test;
ALTER SCHEMA

prueba:

test=> \c
You are now connected to database "test" as user "test".

test=> set search_path to mytest ;
SET
test=> \dp
                                  Access privileges
 Schema |   Name   | Type  |     Access privileges     | Column privileges | Policies 
--------+----------+-------+---------------------------+-------------------+----------
 mytest | bonus    | table | postgres=arwdDxt/postgres+|                   | 
        |          |       | test=r/postgres           |                   | 
 mytest | dept     | table | postgres=arwdDxt/postgres+|                   | 
        |          |       | test=r/postgres           |                   | 
 mytest | emp      | table | postgres=arwdDxt/postgres+|                   | 
        |          |       | test=r/postgres           |                   | 
 mytest | salgrade | table | postgres=arwdDxt/postgres+|                   | 
        |          |       | test=r/postgres           |                   | 
(4 rows)

test=> \dn
List of schemas
  Name  | Owner 
--------+-------
 mytest | test
 public | pg1
(2 rows)

test=> set search_path to mytest ;
SET
test=> select * from emp;
 empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno 
-------+--------+-----------+------+------------+---------+---------+--------
  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     20
  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30
  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30
  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     20
  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30
  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     30
  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     10
  7788 | SCOTT  | ANALYST   | 7566 | 0087-04-19 | 3000.00 |         |     20
  7839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     10
  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30
  7876 | ADAMS  | CLERK     | 7788 | 0087-05-23 | 1100.00 |         |     20
  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     30
  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     20
  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     10
(14 rows)

Supongo que te gusta

Origin blog.csdn.net/alwaysbefine/article/details/132185076
Recomendado
Clasificación