Ámbito de los privilegios de objetos

Todos los objetos son globales (por ejemplo, base de datos, usuario o grupo) o locales (es decir, existen en una base de datos, como una tabla o una vista). Puede asignar privilegios de objeto para que se apliquen globalmente (a todos los objetos en todas las bases de datos) o localmente (a un solo objeto en una única base de datos).

El siguiente ejemplo se inicia como una definición local y pasa a una definición más general.

Si utiliza mandatos SQL para gestionar permisos de cuenta, la base de datos a la que está conectado tiene sentido cuando emite un mandato GRANT. Si está conectado a la base de datos del sistema (esta base de datos tiene el nombre SYSTEM), el privilegio se aplica a todas las bases de datos. Si está conectado a una base de datos específica, el privilegio solo se aplica a esa base de datos.

A partir del release 7.0.3, puede utilizar una notación de objetos completa para establecer el ámbito de los privilegios de objetos de cualquier base de datos. La notación de objetos completa tiene el formato:
database.schema.object
donde:
base de datos
Nombre de base de datos específico o la palabra clave ALL para otorgar el privilegio a todas las bases de datos.
esquema
Nombre de esquema específico o la palabra clave ALL para todos los esquemas con el valor de base de datos especificado.
objeto
Clase de objeto, como TABLE, VIEW, etc., o un nombre de objeto específico.
Por ejemplo, para asignar un privilegio a un objeto en una base de datos concreta y un determinado esquema, inicie sesión en la base de datos y otorgue el privilegio sobre el objeto a un usuario o grupo. En el caso de este tipo de privilegio, debe existir el objeto, y este privilegio sustituye cualquier otro privilegio definido.
MYDB.SCH1(USER1)=> GRANT LIST ON testdb TO user1;

De manera similar, puede iniciar sesión en una base de datos a la que tenga acceso y otorgar el permiso utilizando un nombre completo:

DEV.TEST(USER2)=> GRANT LIST ON mydb.sch1.testdb TO user1;
Para asignar un privilegio a una clase de objetos en una determinada base de datos y un esquema concreto, inicie sesión en la base de datos para otorgar el privilegio sobre la clase a un usuario o un grupo. Cuando asigne un privilegio a una clase (como una tabla), el sistema otorgará al usuario o al grupo ese privilegio sobre todos los objetos de esa clase si el objeto existía en el momento de la concesión.
MYDB.SCH1(USER1)=> GRANT SELECT ON TABLE TO user1;

De manera similar, puede iniciar sesión en una base de datos a la que tenga acceso y otorgar el permiso utilizando un nombre completo:

DEV.TEST(USER2)=> GRANT SELECT ON MYDB.ALL.TABLE TO user1;
Para asignar un privilegio una clase de objetos en todas las bases de datos, inicie sesión en la base de datos del sistema para otorgar el privilegio sobre la clase a un usuario o un grupo. Cuando defina privilegios para clases de objetos de usuario en la base de datos del sistema, el sistema dará por supuesto que está solicitando un ámbito global.
SYSTEM.ADMIN(ADMIN)=> GRANT SELECT ON TABLE TO user1;

De manera similar, puede iniciar sesión en una base de datos a la que tenga acceso y otorgar el permiso utilizando un nombre completo:

DEV.TEST(USER2)=> GRANT SELECT ON ALL.ALL.TABLE TO user1;
Nota: Cuando se utiliza el comando GRANT para conceder privilegios a nivel de base de datos y a nivel de sistema, la concesión emitida para la base de datos anula la concesión emitida a nivel de sistema.
Precedencia de privilegios: Orden de precedencia de permisos de Netezza Performance Server for Cloud Pak for Data y Netezza Performance Server for Cloud Pak for Data System:
  1. Privilegios otorgados sobre un determinado objeto en una base de datos concreta y un determinado esquema, para sistemas que admiten varios esquemas
  2. Privilegios otorgados sobre una clase de objeto en una base de datos concreta y un determinado esquema, para sistemas que admiten varios esquemas
  3. Privilegios otorgados sobre un determinado objeto en todos los esquemas de una determinada base de datos
  4. Privilegios otorgados sobre una clase de objeto en todos los esquemas de una determinada base de datos
  5. Privilegios otorgados sobre un objeto en la base de datos del sistema
  6. Privilegios otorgados sobre una clase de objeto en la base de datos del sistema

Puede asignar varios privilegios para el mismo objeto para el mismo usuario. El sistema Netezza Performance Server utiliza las reglas de precedencia para determinar qué privilegios utilizar. Por ejemplo, puede otorgar a los usuario privilegios a nivel global, pero los privilegios de usuario sobre un determinado objeto o a nivel de base de datos sustituirán los permisos globales. Por ejemplo, supongamos los tres mandatos GRANT siguientes:

En la base de datos del sistema, introduzca:
system.admin(admin)=> GRANT SELECT,INSERT,UPDATE,DELETE,TRUNCATE ON
  TABLE TO user1
En la base de datos dev, introduzca:
dev.schema(admin)=> GRANT SELECT,INSERT,UPDATE ON TABLE TO user1
En la base de datos dev, introduzca:
dev.schema(admin)=> GRANT SELECT, LOAD ON customer TO user1
Si utilizamos estas sentencias de otorgamiento y suponemos que customer es una tabla de usuario, user1 tendrá los siguientes permisos:
  • Con el primer mandato GRANT, user1 tiene permisos globales para SELECT, INSERT, UPDATE, DELETE o TRUNCATE en cualquier tabla de base de datos.
  • El segundo mandato GRANT restringe los permisos del user1 específicamente en la base de datos dev. Cuando el user1 se conecta a dev, el user1 solo puede ejecutar operaciones SELECT, INSERT o UPDATE en las tablas dentro de esa base de datos.
  • El tercer mandato GRANT sustituye los privilegios del user1 en la tabla de clientes dentro de la base de datos dev. Como resultado de este mandato, las únicas acciones que el user1 puede realizar en la tabla de clientes de la base de datos dev son SELECT y LOAD.
La tabla siguiente lista los mandatos de barra inclinada que muestran los privilegios para usuarios y grupos:
Tabla 1. Mandatos de barra inclinada para ver los privilegios
Mandato Descripción
\dg Lista grupos (grupos de usuarios y de recursos) excepto _ADMIN_.
\dG Lista grupos de usuarios y sus miembros.
\dp <user> Lista los privilegios otorgados a un usuario directamente o por medio de la pertenencia a un grupo de usuarios.
\dpg <group> Lista los privilegios otorgados a un grupo de usuarios.
\dpu <user> Lista los privilegios otorgados a un usuario directamente y no por su pertenencia a un grupo de usuarios.
\du Lista usuarios.
\dU Lista los usuarios que son miembros de al menos un grupo de usuarios y los grupos de los que es miembro cada uno.
Cuando revoque privilegios, asegúrese de iniciar sesión en la misma base de datos (y esquema, en el caso de sistemas con varios esquemas) donde haya otorgado los privilegios o utilice formatos de nombre completos que coincidan con las ubicaciones en la que haya otorgado privilegios. A continuación, puede utilizar esos mandatos de barra inclinada para verificar los resultados.