Logo

jueves, 3 de febrero de 2011

Agregar Usuarios PostgreSQL

En PostgreSQL cada usuario tiene un ID de sistema interno en PostgreSQL (llamado sysid), así como una contraseña. El ID es utilizado para asociar objetos en una base de datos con su propietario.

PostgreSQL crea por defecto a un superusuario  lamado postgres. Todos los demás superusuarios pueden ser creados por éste, o por cualquier otro
superusuario creado posteriormente.

PostgreSQL proporciona dos métodos para la creación de usuarios de bases de datos. Cada uno de ellos requiere autenticación como superusuario.
Los métodos son:

  • A través del uso del comando SQL CREATE USER.
  • Un programa de línea de comandos llamado createuser
CREATE USER.

La sintaxis para CREATE USER es:                      
CREATE USER nombre_usuario                            
[ WITH [ SYSID uid ]                                  
[ PASSWORD 'password' ] ]                             
[ CREATEDB | NOCREATEDB ]                             
[ CREATEUSER | NOCREATEUSER ]                         
[ IN GROUP groupname [, ...] ]                        
[ VALID UNTIL 'abstime' ]                             

A continuación se describe cada una de las partes de la sintaxis de CREATE
USER:
SYSID uid
       Especifica que el ID que va a definirse debe establecerse al valor de uid.
       Si se omite, un razonable y único valor numérico por defecto es escogido.
      
PASSWORD 'password'
       Establece la nueva contraseña del usuario. Si no se especifica, la
       contraseña por defecto es NULL.
      
CREATEDB | NOCREATEDB
       Usando la palabra clave CREATEDB se le garantiza al nuevo usuario el
       privilegio de crear nuevas bases de datos, así como el de destruir las de
       su propiedad. Usando NOCREATEDB se deniega este permiso (que es lo
       que ocurre por defecto).
      
CREATEUSER | NOCREATEUSER
       Certifica el privilegio de crear nuevos usuarios. Si un usuario tiene los
       privilegios de crear a otros usuarios tendrá además todos los privilegios,
       en todas las bases de datos (incluyendo los permisos para crear una base
       de     datos,    aunque     se    haya    especificado   NOCREATEDB).
       NOCREATEUSER explícitamente fuerza a la situación por defecto, que
       deniega el privilegio.
      
IN GROUP nombre_grupo [, ...]
       Añade al nuevo usuario al grupo llamado nombre_grupo. Pueden ser
       especificados múltiples nombres de grupo, separándolos mediante
       comas. El o los grupos deben existir para que funcione la condición.
      
VALID UNTIL 'abstime'
       Establece que la contraseña del usuario expirará el abstime, el cual debe
       ser un formato reconocible de fecha/hora (timestamp). Tras esa fecha, la
       contraseña se resetea, y la expiración se hace efectiva.
      
VALID UNTIL 'infinity'
       Establece validez permanente para la contraseña del usuario.
      
      

createuser
El script createuser es ejecutado directamente desde la línea de comandos, y
puede operar de dos formas.
Si se utiliza sin argumentos, él interactivamente le pedirá el nombre de
usuario y cada uno de los privilegios que se le van a asignar. Alternamente,
puede optar por especificar las opciones y el nombre del usuario a ser creado
en la misma línea de comandos.

La sintaxis de createuser es:
createuser [ opciones ] [ nombre_usuario ]

El nombre_usuario en la sintaxis representa el nombre del usuario que va a
crear. Reemplace opciones con una o más de las siguientes:

-d, -createdb Equivalente a la palabra clave CREATEDB. Permite al
    nuevo usuario crear bases de datos.

-D, -no-createdb Equivalente a la palabra clave NOCREATEDB
    Explícitamente indica que el nuevo usuario no puede crear bases de
    datos.

-a, -adduser Equivalente a la palabra clave CREATEUSER Perimte al
    nuevo usuario la creación de otros usuarios, y asigna el status de
    superusurario al usuario.

-A, -no-adduser Equivalente a la palabra clave NOCREATEUSER.
    Explícitamente indica que el nuevo usuario no es superusuario.

-i SYSID, -sysid=SYSID Establece el nuevo ID de sistema del usuario a
    SYSID.

-P, -pwprompt Resulta en una petición de introducción de contraseña,
    permitiéndole establecer la contraseña del nuevo usuario.

-h NOMBRE_MAQUINA, -host=NOMBRE_MAQUINA Especifica desde
    qué NOMBRE_MAQUINA se conectará, además de la local (localhost), o
    la máquina definida por la variable de entorno PGHOST.

-p PUERTO, -port=PUERTO Especifica que la conexión de base de
    datos se realizará por el puerto PUERTO, en vez de por el puerto por
    defecto.

-U NOMBRE_USUARIO, -username=NOMBRE_USUARIO Especifica
  que NOMBRE_USUARIO será el usuario que conecte a PostgreSQL (por
  defecto se conecta usando el nombre de usuario del sistema).

-W, -password Resulta en una petición de contraseña para el usuario
  que conecta, lo cual ocurre automáticamente si el archivo pg_hba.conf
  está configurado para no confiar en la máquina solicitante.
 

2 comentarios:

  1. Luego de crear el Usuario he tenido problemas para manejar las bases de datos con el nuevo usuario.
    La solución

    GRANT ALL PRIVILEGES ON TABLE weather to usr_mydb;

    ResponderEliminar
  2. Es útil para manejar bases de datos crear grupos que tengan los privilegios que necesitamos para cierta base de datos y luego agregar a estos grupos los usuarios que lo requieran.

    CREATE ROLE name [ [ WITH ] option [ ... ] ]

    where option can be:

    SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE rolename [, ...]
    | IN GROUP rolename [, ...]
    | ROLE rolename [, ...]
    | ADMIN rolename [, ...]
    | USER rolename [, ...]
    | SYSID uid

    En mi caso el grupo sera:

    CREATE ROLE name WITH NOSUPERUSER NOCREATEDB NOCREATEROLE NOCREATEUSER INHERIT NOLOGIN

    ResponderEliminar