Vous êtes sur la page 1sur 5

Database Roles and Privileges

PostgreSQL administra los permisos de acceso de base de datos utilizando el concepto de


roles. Este rol puede considerarse ya sea como usuario de base de datos, o un grupo de
usuarios de bases de datos, dependiendo de cmo el rol se establezca. Un rol puede ser
propietario de objetos de bases de datos (por ejemplo, tablas) y se pueden asignar
privilegios de los objetos a otros roles para controlar quin tiene acceso a los objetos.
Adems, es posible la concesin de la pertenencia de un rol a otro rol, lo que permite
utilizar el rol de miembro de los privilegios asignados al rol que es un miembro de.
El concepto de los roles subsume los conceptos de "usuarios" y "grupos". En las versiones
de PostgreSQL anteriores de 8.1, los usuarios y los grupos eran distintos tipos de entidades,
pero ahora hay slo roles. Cualquier funcin puede actuar como un usuario, un grupo, o
ambos.

Atributos de Roles
Uno de los roles de base de datos puede tener una serie de atributos para definir sus
privilegios e interactuar con el sistema de autenticacin de cliente.
login privilege
Solo roles que tienen el atributo de inicio de sesin puede ser usados como el nombre de rol
inicial de una conexin de base de datos. Un rol con el atributo de inicio de sesin puede
ser considerada lo mismo que un "usuario de base de datos". Para crear un rol con el
privilegio de acceso:
CREATE nombre de rol LOGIN;
CREATE nombre de usuario;

(CREATE USER es equivalente a CREATE ROLE, salvo que CREATE USER asume
LOGIN por defecto, mientras que CREATE ROLE no.)
superuser
El status de superusuario de base de datos se salta todas las comprobaciones de permisos.
Este es un privilegio que no debera ser utilizado con descuido, lo mejor es hacer la mayor
parte de su trabajo como un rol que no sea un super-usuario. Para crear una nueva base de
datos de superusuario, use CREATE ROLE nombre SUPERUSER. Debe hacer esto como
un rol que ya sea un super-usuario.

database creation
Debe ser explcitamente dado para crear bases de datos (con excepcin de los
superusuarios, ya que pasan por alto todos los controles de permiso). Para crear este role,
usar de CREATE ROLE nombre CREATEDB.
role creation
Debe ser explcitamente dado para crear ms roles (a excepcin de los superusuarios, ya
que pasan por alto todos los controles de permiso). Para crear esa funcin, usar CREATE
ROLE nombre CREATEROLE. Un role con el privilegio CREATEROLE puede modificar
y colocar otros roles, tambin, as como de conceder o revocar la pertenencia a ellas. Sin
embargo, para crear, modificar, eliminar o cambiar roles de super-usuario, el estado de
superusuario es imprescindible; CREATEROLE no es suficiente para eso.
password
Slo es significativa si el mtodo de autenticacin de cliente requiere que el usuario
proporcione una contrasea cuando se conecta a la base de datos. La contrasea y los
mtodos de autenticacin MD5 hacen uso de contraseas. Las contraseas de bases de
datos son independientes de las contraseas del sistema operativo. Especificar una
contrasea a la creacin de papel con una cuerda CREATE ROLE Nombre de Usuario
PASSWORD 'contrasea'.
Los atributos de roles pueden ser modificados despus de la creacin con ALTER ROLE.
Vea las pginas de referencia para la funcin de CREATE y ALTER comandos ROLE para
ms detalles.
Consejo: Es una buena prctica crear un ROLE que tenga el CREATEDB CREATEROLE
y privilegios, pero no sea un superusuario, y luego utilizar este ROLE para todas las
corrientes de gestin de bases de datos y roles. Este enfoque evita los peligros de operar
como un superusuario para las tareas que realmente no lo requieren.

Privilegios
Cuando se crea un objeto, se le asigna un propietario. El propietario es normalmente el rol
que ejecut la sentencia de creacin. Para la mayora de los tipos de objetos, el estado
inicial es que slo el propietario (o un super-usuario) puede hacer cualquier cosa con el
objeto. Para permitir que otros roles puedan usarla, deben otorgarse privilegios. Hay varios
tipos diferentes de privilegio: SELECT, INSERT, UPDATE, DELETE, TRUNCATE,
REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, and
USAGE. Para obtener ms informacin sobre los diferentes tipos de privilegios con el
apoyo de PostgreSQL, consulte la pgina de referencia GRANT.

Para asignar privilegios, se utiliza el comando GRANT. As que, si Joe es un ROLE


existente, y de cuentas es una tabla existente, el privilegio de actualizar la tabla puede ser
concedido con:
GRANT UPDATE ON cuentas TO joe;

El nombre especial public puede ser utilizado para conceder un privilegio a cada role en el
sistema. Escrito ALL en lugar de un privilegio especfico establece que todos los
privilegios que se aplican al objeto sern concedidos.
Para revocar el privilegio, utilice el comando REVOKE:
REVOKE ALL ON cuentas de PUBLICA;

Los privilegios de propietario de un objeto (es decir, el derecho a modificar o destruir el


objeto) son siempre implcitos en ser el dueo, y no pueden ser concedidos o revocados.
Sin embargo, el propietario puede elegir para revocar sus propios privilegios ordinarios, por
ejemplo, para hacer una tabla de slo lectura para s mismo, as como los dems.
Un objeto puede ser asignado a un nuevo propietario con un comando ALTER del tipo
apropiado para el objeto. Los superusuarios siempre puede hacer esto, los roles ordinarios
slo puede hacerlo si los dos son el actual propietario del objeto (o un miembro del rol de la
propiedad) y un miembro del rol del propietario nuevo.

Composicin de privilegios
Con frecuencia es conveniente que los usuarios se agrupen para facilitar la administracin
de los privilegios: de esa manera, los privilegios pueden ser concedidos a, o revocados de
un grupo como un todo. En PostgreSQL Esto se hace mediante la creacin de un rol que
representa el grupo y, a continuacin, la concesin de pertenencia al rol del grupo a los
roles de cada usuario.
Para configurar una funcin de grupo, primero crear la funcin:
CREATE ROLE name;

Un rol que se utiliza como un grupo no tiene el atributo LOGIN, aunque se puede
establecer si lo desea.
Una vez que el papel de grupo existe, usted puede agregar y eliminar miembros usando el
comando GRANT y REVOKE:
GRANT group_role TO role1, ... ;
REVOKE group_role FROM role1, ... ;

Se puede conceder la adhesin a los roles de otro grupo, tambin (ya que no hay realmente
una distincin entre las roles de grupo y los roles no grupales). La base de datos no le

permitir crear lazos de pertenencia circular. Adems, no se permite la concesin de la


pertenencia a un rol pblico.
Los miembros de un rol puede usar los privilegios del rol de grupo de dos maneras. En
primer lugar, cada miembro de un grupo puede hacer de forma explcita SET ROLE para
"convertirse" temporalmente en el rol de grupo. En este estado, el perodo de base de datos
tiene acceso a los privilegios de la funcin del grupo por encima del rol de acceso original,
y cualquier objeto de base de datos creada se considera propiedad del rol de grupo y no de
la funcin de acceso. En segundo lugar, los roles de los miembros que tienen el atributo
INHERIT tienen automticamente el uso de los privilegios de los roles a los que
pertenecen. Como ejemplo, supongamos que hemos hecho:
CREATE ROLE
CREATE ROLE
CREATE ROLE
GRANT admin
GRANT wheel

joe LOGIN INHERIT;


admin NOINHERIT;
wheel NOINHERIT;
TO joe;
TO admin;

Inmediatamente despus de conectar como el rol Joe, un perodo de base de datos tendr el
uso de los privilegios concedidos directamente a Joe adems de los privilegios concedidos
al administrador, porque Joe ", hereda los privilegios de" administrador. Sin embargo, los
privilegios concedidos a wheel no estn disponibles, porque a pesar de que Joe es
indirectamente un miembro de wheel, la composicin es a travs de administrador que tiene
el atributo NOINHERIT. Despus de
SET ROLE admin;

la sesin tendra el uso nicamente de los privilegios concedidos a admin, y no de los


concedidos a Joe. Despus de:
SET ROLE wheel;

la sesin tendra el uso nicamente de los privilegios concedidos a wheel, y no a los que se
conceden a cualquiera de Joe o de administracin. El estado de privilegio original puede ser
restaurado con cualquiera de:
SET ROLE joe;
SET ROLE NONE;
RESET ROLE;

El comando SET ROLE siempre permite seleccionar cualquier role que la funcin original
de inicio de sesin es directa o indirectamente un miembro. As, en el ejemplo anterior, no
es necesario convertirse en administrador antes de convertirse en wheel.
En el estndar SQL, hay una distincin clara entre los usuarios y roles, y los usuarios no
heredan automticamente los privilegios, mientras que los roles hacer. Este
comportamiento se puede obtener en PostgreSQL, dando roles se utilizan las funciones de
SQL como el atributo INHERIT.

El papel de los atributos de LOGIN, SUPERUSER, CREATEDB, y CREATEROLE


pueden considerarse como privilegios especiales, pero nunca se heredan como los
privilegios de los objetos ordinarios de la base de datos. Usted realmente debe establecer
SET ROLE a un rol especfico con uno de estos atributos a fin de hacer uso del atributo.
Continuando con el ejemplo anterior, podramos optar por otorgar CREATEDB y
CREATEROLE a la funcin de administrador. Luego de una sesin de conexin como Joe
no tendramos estos privilegios de inmediato, slo despus de hacer SET ROLE admin.
Para destruir a un grupo de roles, usar DROP ROLE:
DROP ROLE name

Ninguna membresa al rol de grupo es revocada automticamente (los roles miembros no se


ven afectados). Notar sin embargo que los objetos de propiedad del rol del primer grupo
deben ser descartados o reasignados a otros propietarios, y los permisos concedidos al rol
de grupo deben ser revocados.

Vous aimerez peut-être aussi