Las cuentas estándar en AnalyticDB for PostgreSQL no tienen permisos de forma predeterminada. Las cuentas con privilegios (incluida la cuenta inicial) otorgan acceso a las cuentas estándar mediante dos métodos:
Otorgamiento directo: asigne permisos específicos sobre objetos individuales de la base de datos a una cuenta.
Otorgamiento basado en roles: cree un rol, otórguele permisos y asígnelo a varias cuentas. Este método simplifica la gestión de permisos cuando se trabaja con muchas cuentas.
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
Una cuenta con privilegios o el permiso
RDS_SUPERUSERLas cuentas y los objetos de la base de datos que desea gestionar
Otorgar permisos sobre objetos de la base de datos
Cuando se crea un objeto en la base de datos —como una base de datos, un esquema, una tabla, una vista, una secuencia o una función—, todos los permisos sobre ese objeto pertenecen a su propietario. De forma predeterminada, solo el propietario y las cuentas con el permiso RDS_SUPERUSER pueden operar sobre el objeto. El resto de las cuentas requiere un otorgamiento explícito.
A continuación se muestran los permisos disponibles para cada tipo de objeto.
|
Objeto |
Permisos |
|
|
Tablas, vistas y secuencias |
SELECT, INSERT, UPDATE, DELETE, RULE, ALL |
|
|
Columnas de tabla |
SELECT, INSERT, UPDATE |
|
|
Tablas externas |
SELECT, RULE, ALL |
|
|
Bases de datos |
CONNECT, CREATE, TEMPORARY |
TEMP, ALL |
|
Funciones |
EXECUTE |
|
|
Lenguajes procedimentales |
USAGE |
|
|
Esquemas |
CREATE, USAGE, ALL |
Los permisos se limitan al alcance de cada tipo de objeto. La instrucción GRANT ALL sobre una base de datos otorga únicamente CONNECT, CREATE y TEMP; no concede acceso a las tablas contenidas en ella. Otorgue los permisos de tabla por separado.
A continuación se muestran ejemplos comunes de operaciones para otorgar y revocar permisos.
Otorgue el permiso INSERT sobre la tabla mytable a jsmith:
GRANT INSERT ON mytable TO jsmith;
Otorgue SELECT y TRUNCATE sobre todas las tablas existentes en el esquema myschema a jsmith:
GRANT SELECT,TRUNCATE ON ALL TABLES IN SCHEMA myschema TO jsmith;
Otorgue SELECT sobre la columna col1 de mytable a jsmith:
GRANT SELECT (col1) on TABLE mytable TO jsmith;
Revoque todos los permisos sobre mytable de jsmith:
REVOKE ALL PRIVILEGES ON mytable FROM jsmith;
Otorgar permisos basados en roles
El otorgamiento basado en roles resulta útil cuando varias cuentas necesitan el mismo conjunto de permisos. Otorgue los permisos a un rol una sola vez y asígnelo a cualquier cantidad de cuentas. Todas las cuentas asignadas heredan automáticamente los permisos del rol.
El siguiente ejemplo muestra el flujo de trabajo completo.
-
Cree un rol llamado
admincon los atributos CREATEROLE y CREATEDB:CREATE ROLE admin CREATEROLE CREATEDB; -
Asigne el rol
adminajohn,sallyybob:GRANT admin TO john, sally, bob; -
Para quitar el rol de una cuenta específica, revoque la asignación:
REVOKE admin FROM bob; -
Otorgue permisos sobre los objetos de la base de datos al rol
admin. Todas las cuentas que tengan este rol heredarán dichos permisos:GRANT ALL ON TABLE mytable TO admin; GRANT ALL ON SCHEMA myschema TO admin; GRANT ALL ON DATABASE mydb TO admin;
Preguntas frecuentes
¿Cómo otorgo el permiso DROP TABLE?
La instrucción GRANT no permite otorgar DROP TABLE directamente. Solo el propietario de una tabla o de un esquema puede eliminarlo.
Para permitir que una sola cuenta elimine una tabla, cambie el propietario de la tabla a dicha cuenta:
-- new_owner can now drop mytable
ALTER Table mytable OWNER TO new_owner;
-- new_owner can now drop mytable and all other tables in myschema
ALTER SCHEMA myschema OWNER TO new_owner;
Si necesita que varias cuentas eliminen la misma tabla, transfiera la propiedad a un rol y asigne ese rol a cada cuenta:
-- Create a role to hold ownership
CREATE ROLE new_role;
-- Transfer ownership to the role
ALTER Table mytable OWNER TO new_role;
ALTER SCHEMA myschema OWNER TO new_role;
-- Grant the role to any account that needs drop access
GRANT new_role TO myuser;