Asignación y eliminación de derechos. Establecer permisos comando de concesión Uso de vistas para filtrar privilegios

GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON (tbl_name | * | *.* | db_name.*) TO nombre_usuario "contraseña"] [, nombre_usuario ...] ] ] ] ] REVOCAR priv_type [(column_list)] [, priv_type [(column_list)] ...] ON (tbl_name | * | *.* | db_name.*) DESDE nombre_usuario [, nombre_usuario ...]

GRANT está incluido en MySQL versión 3.22.11 y superiores. En versiones anteriores de MySQL, la declaración GRANT no hace nada.

Los comandos GRANT y REVOKE permiten a los administradores del sistema crear usuarios de MySQL y otorgar o revocar derechos a los usuarios en cuatro niveles de privilegios:

Nivel global Los privilegios globales se aplican a todas las bases de datos en el servidor especificado. Estos privilegios se almacenan en la tabla mysql.user. Nivel de base de datos Los privilegios de la base de datos se aplican a todas las tablas de la base de datos especificada. Estos privilegios se almacenan en las tablas mysql.db y mysql.host. Nivel de mesa Los privilegios de tabla se aplican a todas las columnas de la tabla especificada. Estos privilegios se almacenan en la tabla mysql.tables_priv. Nivel de columna Los privilegios de columna se aplican a columnas individuales en la tabla especificada. Estos privilegios se almacenan en la tabla mysql.columns_priv.

Si se otorgan privilegios a un usuario que no existe, entonces se crea ese usuario. Para ver ejemplos del comando GRANT, consulte la sección 4.3.5 Agregar nuevos usuarios a MySQL.

La tabla muestra una lista de posibles valores para el parámetro priv_type para las declaraciones GRANT y REVOKE:

TODOEstablece todos los privilegios simples excepto CON GRANT OPTION
ALTERARPermite el uso de ALTER TABLE
CREARPermite el uso de CREATE TABLE
CREAR TABLAS TEMPORALESPermite el uso de CREAR TABLA TEMPORAL
BORRARPermite el uso de BORRAR
GOTAPermite el uso de DROP TABLE.
EJECUTARPermite al usuario ejecutar procedimientos almacenados (para MySQL 5.0)
ARCHIVOPermite el uso de SELECT... INTO OUTFILE y LOAD DATA INFILE.
ÍNDICEPermite el uso de CREAR ÍNDICE Y caeÍNDICE
INSERTARPermite el uso de INSERT
BLOQUEAR MESASPermite el uso de LOCK TABLES en tablas que tienen el privilegio SELECT.
PROCESOPermite el uso de MOSTRAR LISTA DE PROCESOS COMPLETA
REFERENCIASreservado para uso futuro
RECARGARPermite el uso de FLUSH
CLIENTE DE REPLICACIÓNOtorga al usuario el derecho de consultar la ubicación de los servidores maestro y esclavo.
ESCLAVO DE REPLICACIÓNNecesario para los servidores esclavos durante la replicación (para leer información de los registros binarios del servidor principal).
SELECCIONARPermite el uso de SELECT
MOSTRAR BASES DE DATOSMOSTRAR BASES DE DATOS Muestra todas las bases de datos.
CERRARPermite el uso del apagado de mysqladmin
SÚPERLe permite establecer una conexión (una vez), incluso si se alcanza max_connections, y ejecutar los comandos CHANGE MASTER, KILL thread, mysqladmin debug, PURGE MASTER LOGS y SET GLOBAL.
ACTUALIZARPermite el uso de ACTUALIZAR
USOSinónimo de ``sin privilegios''.

El valor USAGE se puede especificar si necesita crear un usuario sin privilegios.

Los privilegios CREAR TABLAS TEMPORALES, EJECUTAR, BLOQUEAR TABLAS, REPLICACIÓN..., MOSTRAR BASES DE DATOS y SUPER son nuevos en la versión 4.0.2. Para aprovechar estos nuevos privilegios después de actualizar a la versión 4.0.2, debe ejecutar el script mysql_fix_privilege_tables.

En versiones anteriores de MySQL, el privilegio PROCESS otorga los mismos derechos que el nuevo privilegio SUPER.

Para revocar los privilegios de un usuario otorgados por el comando GRANT, use el valor priv_type en GRANT OPTION:

Mysql> REVOCAR OPCIÓN DE CONCESIÓN EN... DESDE...;

Los únicos valores de priv_type que se pueden especificar para una tabla son: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, IDEX y ALTER.

Los únicos valores priv_type que se pueden especificar para una columna (cuando se usa el operador column_list) son SELECT, INSERT y UPDATE.

Los privilegios globales se pueden configurar usando la sintaxis ON *.*, y los privilegios de la base de datos se pueden configurar usando la sintaxis ON db_name.*. Si especifica ON * mientras la base de datos actual está abierta, se establecerán privilegios para esa base de datos. ( Advertencia: si especifica ON * cuando ausencia la base de datos actual está abierta, ¡esto afectará los privilegios globales!)

Para poder definir derechos para usuarios en computadoras específicas, MySQL brinda la posibilidad de especificar el nombre de usuario (nombre_usuario) en el formulario. Si necesita especificar una cadena de usuario que contenga caracteres especiales (como `-"), o una cadena de host que contenga caracteres especiales o comodines (como `%"), puede incluir el nombre computadora remota o usuario entre comillas (por ejemplo, "usuario-prueba"@"nombre-host-prueba").

También puede incluir comodines en el nombre de la computadora remota. Por ejemplo, "%.loc.gov" se refiere al usuario de todas las computadoras remotas en el dominio loc.gov y "144.155.166.%" se refiere al usuario de todas las computadoras remotas en la subred clase C 144.155.166.

El formulario simple usuario es sinónimo de "%".

MySQL no admite comodines en los nombres de usuario. Los usuarios anónimos se definen insertando registros User="" en la tabla mysql.user o creando un usuario con un nombre vacío usando el comando GRANT.

Nota: Si a los usuarios anónimos se les permite conectarse al servidor MySQL, también debe otorgar privilegios a todos los usuarios locales como , porque de lo contrario, cuando un usuario intenta iniciar sesión en MySQL desde la computadora local, la tabla mysql.user usará el usuario anónimo. ¡acceso!

Para verificar si esto sucede en su computadora, ejecute la siguiente consulta:

Mysql> SELECCIONE Host, Usuario DE mysql.user DONDE Usuario="";

Actualmente, el comando GRANT admite nombres de computadoras remotas, tablas, bases de datos y columnas de hasta 60 caracteres. El nombre de usuario no debe contener más de 16 caracteres.

Los privilegios para una tabla o columna se forman utilizando el operador lógico OR a partir de los privilegios en cada uno de los cuatro niveles. Por ejemplo, si la tabla mysql.user indica que el usuario tiene el privilegio SELECT global, ese privilegio no se revoca a nivel de base de datos, tabla o columna.

Los privilegios para una columna se pueden calcular de la siguiente manera:

Privilegios globales O (privilegios de base de datos Y privilegios de computadora remota) O privilegios de tabla O privilegios de columna

En la mayoría de los casos, los derechos de usuario se definen en un solo nivel de privilegio, por lo que este procedimiento no suele ser tan complejo como se describe anteriormente. información detallada La secuencia de acciones para verificar los privilegios se presenta en la sección 4.2 Cuestiones generales de seguridad y el sistema de privilegios de acceso MySQL.

Si se otorgan privilegios a una combinación de usuario/remoto que no está en la tabla mysql.user, se agrega una entrada a la tabla mysql.user y permanece en la tabla hasta que se elimina usando el comando DELETE. En otras palabras, el comando GRANT puede crear registros de usuario en la tabla, pero el comando REVOKE no puede eliminarlos. Esto debe hacerse usando el comando BORRAR.

Si tiene privilegios de base de datos, se crea una entrada en la tabla mysql.db si es necesario. Esta entrada se elimina después de que se eliminen todos los privilegios de esta base de datos con el comando REVOKE.

Si un usuario no tiene ningún privilegio sobre una tabla, entonces la tabla no se muestra cuando el usuario solicita una lista de tablas (por ejemplo, usando la instrucción SHOW TABLES).

La declaración CON GRANT OPTION le da al usuario la capacidad de otorgar a otros usuarios cualquier privilegio que él mismo tenga en un nivel de privilegio específico. Se debe tener cuidado al otorgar el privilegio GRANT, ya que dos usuarios con privilegios diferentes pueden combinar sus privilegios.

Las opciones MAX_QUERIES_PER_HOUR #, MAX_UPDATES_PER_HOUR # y MAX_CONNECTIONS_PER_HOUR # son nuevas en MySQL versión 4.0.2. Estas configuraciones limitan la cantidad de solicitudes, actualizaciones e inicios de sesión que un usuario puede realizar en una hora. Si se establece en 0 (el valor predeterminado), significa que no hay restricciones para este usuario. Mira la sección.

No puedes darle a otro usuario un privilegio que no tienes. El privilegio GRANT le permite otorgar solo aquellos privilegios que tiene.

Tenga en cuenta que si a un usuario se le asigna el privilegio GRANT en un nivel de privilegio particular, entonces todos los privilegios que ese usuario ya tiene (¡o que se le asignarán en el futuro!) en ese nivel también se pueden asignar a ese usuario. Supongamos que a un usuario se le ha otorgado el privilegio INSERT en una base de datos. Si luego otorga el privilegio SELECT en la base de datos y especifica CON GRANT OPTION, el usuario puede otorgar no solo el privilegio SELECT, sino también el privilegio INSERT. Si luego otorga al usuario el privilegio ACTUALIZAR en la base de datos, el usuario puede emitir INSERTAR, SELECCIONAR y ACTUALIZAR.

Los privilegios ALTER no deben asignarse a usuarios normales. ¡Esto le da al usuario la posibilidad de romper el sistema de privilegios cambiando el nombre de las tablas!

Tenga en cuenta que si se utilizan privilegios de tabla o columna incluso para un solo usuario, el servidor verifica los privilegios de tabla y columna para todos los usuarios y esto ralentiza un poco MySQL.

Cuando se inicia mysqld, todos los privilegios se leen en la memoria. Los privilegios de bases de datos, tablas y columnas entran en vigor inmediatamente, mientras que los privilegios a nivel de usuario entran en vigor la próxima vez que el usuario se conecte. El servidor procesa inmediatamente los cambios en las tablas de asignación de privilegios que se realizan mediante los comandos GRANT y REVOKE. Si modifica las tablas de asignación de privilegios manualmente (usando INSERT, UPDATE, etc.), debe ejecutar FLUSH PRIVILEGES o la instrucción Flush-privilege de mysqladmin para indicarle al servidor que recargue las tablas de asignación de privilegios. Consulte la sección 4.3.3 Cuándo entran en vigor los cambios de privilegios.

Las diferencias más significativas entre las versiones ANSI SQL y MySQL del comando GRANT son las siguientes:

  • En MySQL, los privilegios se asignan a la combinación de nombre de usuario + computadora remota, no solo al nombre de usuario.
  • ANSI SQL no tiene privilegios globales o a nivel de base de datos, y ANSI SQL no admite todos los tipos de privilegios de MySQL. MySQL, por otro lado, no admite los privilegios ANSI SQL TRIGGER, EXECUTE o UNDER.
  • La estructura de privilegios ANSI SQL es jerárquica. Si elimina un usuario, se revocan todos los privilegios asignados a ese usuario. En MySQL, los privilegios asignados no se revocan automáticamente; debes eliminarlos tú mismo si es necesario.
  • En MySQL, un usuario puede INSERTAR una tabla si tiene el privilegio INSERTAR solo en unas pocas columnas de esa tabla. Las columnas que no tienen el privilegio INSERT se establecerán con sus valores predeterminados. ANSI SQL requiere el privilegio INSERT en todas las columnas.
  • Cuando elimina una tabla en ANSI SQL, se revocarán todos los privilegios de esa tabla. Si revoca un privilegio en ANSI SQL, también se revocan todos los privilegios que se asignaron en función de ese privilegio. En MySQL, los privilegios solo se pueden eliminar usando el comando REVOKE o cambiando las tablas de asignación de privilegios de MySQL.

Para obtener una descripción del uso de REQUIRE, consulte la sección 4.3.9 Uso de conexiones seguras.

Comentarios del usuario

Publicado por Frank Wortner[Eliminar] [Editar]

No tuve problemas con ld. DEC (Compaq) podría
He reparado ld en un kit de parches. Tu podrías querer
instale el último kit de parches para su Digital Unix
(Tru64 Unix) antes de construir MySQL. Kits de parches
están disponibles en
href=http://ftp.support.compaq.com/public/unix/ >
http://ftp.support.compaq.com/public/unix/

Publicado por el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

Para instalaciones de origen, estas instrucciones se refieren a la estructura del directorio suponiendo que se usó "usr/local" (predeterminado) con configure. Pero las instrucciones de la página anterior (para compilación/instalación) sugieren que utilice:

./configure --prefix=/usr/local/mysql

Para ser coherente (y esto me está causando algunos problemas con Perl, por lo que no es puramente semántico), las instrucciones en esta página deben suponer que /usr/local/mysql se especificó como el directorio de instalación con configure.

Publicado por Linda Wright el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

Este es probablemente el más importante y el menos
Secciones apreciadas de todo MySQL.
documentación para usuarios primerizos de MySQL. EN MI HUMILDE OPINIÓN,
leyendo esta página junto con
http://www.mysql.com/doc/P/r/Privileges.html es un
imprescindible para planificar sistemas de bases de datos seguros para cualquier persona
de cualquier sofisticación real.

Publicado por Christopher Raymond el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

Estoy intentando instalar MySQL en OS X Public Beta. Cuando ejecuto el script mysql_install_db, aparece un mensaje de error:

Dyld: ./bin/mysqld no puede abrir la biblioteca: /usr/lib/libpthread.A.dylib (No existe tal archivo o directorio, errno = 2)
¡Error en la instalación de las tablas de subvenciones!

Supongo que el script busca un directorio que no existe porque Apple tiene una estructura de nombres de directorios un poco diferente. Quizás este script deba modificarse para la distribución de OS X.

¿Alguien puede ayudar?

Publicado por Mark Zieg el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

Sería bueno si hubiera una opción para registrar conexiones, pero no consultas.

Publicado por Bennett Haselton el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

Si ha iniciado sesión como usuario raíz de MySQL, sin una base de datos actual seleccionada, e intenta
otorgar todos los privilegios a un usuario con el comando:

OTORGAR TODOS LOS PRIVILEGIOS EN * A bhaselto

Entonces no se concederán los RELOAD, SHUTDOWN, PROCESS, FILE y GRANT, como puede ser
verificado comprobando la tabla "usuario" de la base de datos "mysql". (Esto es presumiblemente por diseño,
ya que estos privilegios pueden hacer que un usuario sea "demasiado poderoso").

Publicado por DC Hill el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

NOTA: Si ha otorgado privilegios a un usuario en una base de datos en particular, o en cualquier nivel inferior, invoque "REVOKE ALL ON *.* FROM;" NO revocará privilegios en esos niveles. El *.* en la declaración anterior significa "global", no "todas las tablas (individuales) en todas las bases de datos (individuales). Esa declaración SÓLO revocará los privilegios globales, tal como están almacenados en la tabla mysql.user. DEBE revocar cualquier privilegio más específico privilegios de la misma manera en que fueron otorgados, si desea que se eliminen de las tablas de privilegios (es decir, - GRANT ALL ON foo.* TO ; => REVOCAR TODO ON foo.* FROM ;) Espero que esto salve algunos de un poco de tiempo y frustración.

Publicado por Cris Perdue el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

"Si tiene el privilegio de proceso, puede ver
todos los temas.
De lo contrario, sólo podrás ver tus propios hilos."

Publicado por los foros de FreeBSD el sábado 16 de febrero de 2002 a las 22:21[Eliminar] [Editar]

Puede utilizar la herramienta web phpMyAdmin para hacer muchas cosas
de las funciones de administración de MySQL. href="http://www.freebsdforums.org"
>Foros de FreeBSD

Publicado por el lunes 25 de febrero de 2002, a las 6:03 a.m.[Eliminar] [Editar]

Verificado en MySQL 3.23.36 en Red Hat Linux 7.1:
Tenga en cuenta que si escribe
utilizar aire acondicionado;
otorgar selección en * a ;
se le dará acceso a cualquier
base de datos que coincide con "a_c" donde el guión bajo es un
comodín. (Rara vez es un problema, supongo).
Rectificar con
actualice mysql.db establezca db="a\_c" donde db="a_c";

Publicado por jan behrens el martes 9 de julio de 2002, a la 1:31 a.m.[Eliminar] [Editar]

el error antes mencionado de DAN ELIN en x.x.41 es
Aparentemente todavía es válido en x.x.51, no puedo iniciar sesión en un
base de datos después de OTORGAR privilegios y recibir una
contraseña para un nuevo usuario (sí, lancé
privilegios).............sólo es posible el acceso root

Publicado por Dan Egli el jueves 4 de abril de 2002 a las 20:33[Eliminar] [Editar]

Parece haber un error en 3.23.41 al usar Grant.
Sólo root puede acceder a la base de datos mysql, incluso
después de usar Grant para otorgar privilegios en cualquier cosa
base de datos/tabla/columna/ect.. siempre obtienes
permiso denegado, independientemente.

Publicado por Lars Aronsson el sábado 8 de junio de 2002 a las 11:16 a.m.["%". Cuando intento eliminarlos, me dicen que la base de datos es cierta, pero no hay privilegios globales, el
Privilegio CREATE TEMPORARY TABLE en esa base de datos
es denegado.

Tienes que darle global CREATE __y__ global
CREAR TABLAS TEMPORALES para el usuario. OIA:
OTORGAR CREAR, CREAR TABLAS TEMPORALES EN *.* PARA
;

No hace falta decir que esto afecta gravemente a la seguridad.

Publicado por el domingo 25 de agosto de 2002, a las 9:17 a.m.[Eliminar] [Editar]

Los archivos temporales son una gran idea, pero incluso con
Crear y crear derechos de archivos temporales en el
archivo de usuario (derechos globales), todavía no funciona.
Esto parece estar mal diseñado.

Publicado por Brad Bulger el lunes 2 de septiembre de 2002, a las 4:09 a.m.[Eliminar] [Editar]

Cabe destacar que CON OPCIÓN DE SUBVENCIÓN únicamente
permite al usuario transferir privilegios a los usuarios que
ya existe. La creación automática de usuario.
registros no es Aplicar: aparece un error que dice
que el usuario con el privilegio GRANT OPTION no
No tengo acceso a la base de datos "mysql". Esto es
Probablemente sea algo bueno, pero es necesario documentarlo.

Publicado por Michael Babcock el viernes 8 de noviembre de 2002, a las 13:00 horas.[Eliminar] [Editar]

MOSTRAR ESTADO MAESTRO requiere privilegios de PROCESO.
Otras combinaciones extrañas similares deben documentarse.

Publicado por Dee Kintaudi el jueves 21 de noviembre de 2002, a las 12:42 p.m.[Eliminar] [Editar]

Bien, tengo una pregunta y un problema con Mysql y
contraseñas :). Intenté usar varias de las opciones.
y la mayoría de ellos no han funcionado. Sin embargo uno
La solución funcionó y la probé dos veces y
era sólido. Por supuesto que perdí el pedacito de papel que
Lo escribí y parece que no puedo encontrarlo.
solución en cualquier lugar, como si no existiera o tal vez yo
lo imaginaba. La solución que funcionó para mí,
Antes de perder el pequeño trozo de papel en el que lo escribí.
dice algo como esto..... Insertar en usuario raíz
Contraseña "mi contraseña" y luego algo
con "Y", "Y", "Y", (alrededor de una docena o 15 veces más o menos)
Sin embargo, no puedo encontrar esta solución en ninguna parte.
¿Alguien me ayuda aquí?

Creo que sería genial si pusieran esto.
a lo largo de su documentación en lugar de intentar
esconderlo. Creo que esto resolvería muchos problemas. Justo
poner contraseña = "Y", "Y", "Y", es como si se avergonzaran de ello
o algo.

Publicado por AJIT DIXIT el lunes 25 de noviembre de 2002 a las 6:56 a.m.[Eliminar] [Editar]

Cuando trabajo en una actualización de varias tablas con el usuario root
funciona bien

Cuando trabajo con un usuario no root me sale un error

Sql: actualizar distribuidores, áreas establecidas a_nm = aname
donde acd = área

En este capítulo, aprenderá cómo trabajar con privilegios. Como se analizó en el Capítulo 2, SQL se usa típicamente en entornos que requieren reconocimiento de usuario y distinción entre diferentes usuarios de sistemas. En general, los propios administradores de bases de datos crean usuarios y les otorgan privilegios. Por otro lado, los usuarios que crean tablas ellos mismos tienen derechos para administrarlas. Los privilegios son los que determinan si un usuario específico puede ejecutar un comando determinado. Existen varios tipos de privilegios correspondientes a varios tipos de operaciones. Los privilegios se otorgan y revocan mediante dos comandos SQL: - GRANT y REVOKE. Este capítulo le mostrará cómo se utilizan estos comandos.

USUARIOS

Cada usuario en un entorno SQL tiene un nombre o número de identificación especial. La terminología es diferente en todas partes, pero hemos elegido (siguiendo ANSI) referirnos a él o al número como Identificador de acceso (ID). Un comando enviado a la base de datos se asocia con un usuario específico; o en su defecto, un Identificador de Acceso especial. En lo que respecta a una base de datos SQL, el ID de permiso es el nombre de usuario y SQL puede usar la palabra clave especial USUARIO, que se refiere al ID de acceso asociado con el comando actual. El comando se interpreta y se permite (o se deniega) en función de la información asociada con el ID de acceso del usuario que emite el comando.

REGISTRO

En sistemas con numerosos usuarios, existe algún tipo de procedimiento de inicio de sesión que el usuario debe completar para poder acceder al sistema informático. Este procedimiento determina qué ID de acceso se asociará con el usuario actual. Normalmente, cada persona que utiliza la base de datos debe tener su propia identificación de acceso y, al registrarse, se convierte en un usuario válido. Sin embargo, a menudo los usuarios con muchas tareas pueden registrarse con diferentes ID de acceso o, por el contrario, varios usuarios pueden utilizar un ID de acceso. Desde una perspectiva SQL no hay diferencia entre estos dos casos; trata al usuario simplemente como su ID de acceso. La base de datos SQL puede utilizar su propio procedimiento de inicio de sesión o puede permitir que otro programa, como Sistema operativo(el programa principal que se ejecuta en su computadora), procese el archivo de registro y obtenga la identificación de acceso de este programa. De una forma u otra, SQL tendrá un ID de acceso para asociar con sus acciones y la palabra clave USUARIO será relevante para usted.

PROPORCIONANDO PRIVILEGIOS

Cada usuario de una base de datos SQL tiene un conjunto de privilegios. Esto es lo que el usuario puede hacer (tal vez sea un archivo de registro, que puede considerarse un privilegio mínimo). Estos privilegios pueden cambiar con el tiempo: se agregan nuevos y se eliminan los antiguos. Algunos de estos privilegios están definidos en ANSI SQL, pero también se requieren privilegios adicionales. Los privilegios de SQL definidos por ANSI no son suficientes en la mayoría de situaciones de la vida real. Por otro lado, los tipos de privilegios necesarios pueden variar según el tipo de sistema que esté utilizando, para lo cual ANSI no hace recomendaciones. Los privilegios que no forman parte del estándar SQL pueden utilizar una sintaxis similar y no totalmente coherente con el estándar.

PRIVILEGIOS ESTÁNDAR

Los privilegios de SQL definidos por ANSI son privilegios de objeto. Esto significa que el usuario tiene el privilegio de ejecutar un comando determinado sólo en un objeto específico en la base de datos. Obviamente, los privilegios deben distinguir entre estos objetos, pero un sistema de privilegios basado únicamente en los privilegios de un objeto no puede abordar todo lo que SQL necesita, como veremos más adelante en este capítulo. Los privilegios de un objeto están asociados tanto con usuarios como con tablas. Es decir, el privilegio se otorga a un usuario específico en una tabla específica, o en una tabla o vista subyacente. Debes recordar que el usuario que creó la tabla (de cualquier tipo) es el propietario de esta tabla.

Esto significa que el usuario tiene todos los privilegios en esta tabla y puede transferir privilegios a otros usuarios en esta tabla. Privilegios que se pueden asignar a un usuario:

SELECCIONAR Un usuario con este privilegio puede ejecutar consultas en la tabla.

INSERT Un usuario con este privilegio puede emitir un comando INSERT en una tabla.

ACTUALIZAR Un usuario con este privilegio puede emitir un comando ACTUALIZAR en una tabla. Puede restringir este privilegio a columnas de tabla específicas.

ELIMINAR Un usuario con este privilegio puede emitir un comando ELIMINAR en una tabla.

REFERENCIAS Un usuario con este privilegio puede definir una clave externa que utilice una o más columnas de esta tabla como clave principal. Puede restringir este privilegio a determinadas columnas. (Consulte el Capítulo 19 para obtener detalles sobre la clave externa y la clave principal).

Además, encontrará privilegios de objetos no estándar, como ÍNDICE, que otorga el derecho a crear un índice en una tabla, SINÓNIMO, que otorga el derecho a crear un sinónimo para un objeto, que se explicará en el Capítulo 23. y ALTER, que otorga el derecho de ejecutar el comando ALTER TABLE en una tabla. El motor SQL asigna estos privilegios a los usuarios mediante el comando GRANT.

EQUIPO DE BECA

Supongamos que la usuaria Diane tiene una tabla Clientes y quiere permitir que el usuario Adrian la consulte. Luego, Diane debería ingresar el siguiente comando:

CONCEDER INSERTO SOBRE Vendedores A Diane;

Ahora Adrian puede ejecutar consultas en la tabla Clientes. Sin otros privilegios, sólo puede seleccionar valores; pero no puede realizar ninguna acción que pueda afectar los valores de la tabla Clientes (incluido el uso de la tabla Clientes como tabla principal de la clave externa, lo que limita los cambios que se pueden realizar en el valor de la tabla Clientes).

Cuando SQL recibe un comando GRANT, verifica los privilegios del usuario que emite el comando para determinar si el comando GRANT es válido. Adrian no puede dar esta orden por sí solo. Tampoco puede otorgar permiso SELECT a otro usuario: la tabla todavía pertenece a Diane (más adelante mostraremos cómo Diane puede otorgar permiso SELECT a Adrian a otros usuarios).

La sintaxis es la misma que para otorgar otros privilegios. Si Adrian es el propietario de la tabla de Vendedores, entonces puede permitir que Diane ingrese filas usando la siguiente cláusula

CONCEDER INSERTO SOBRE Vendedores A Diane; Diane ahora tiene derecho a colocar un nuevo vendedor en la tabla.

GRUPOS DE PRIVILEGIOS, GRUPOS DE USUARIOS

No debes limitarte a otorgar un único privilegio a un usuario individual con el comando GRANT. Las listas de privilegios o usuarios separados por comas son perfectamente aceptables. Stephen puede proporcionar SELECT e INSERT en la tabla Order para Adrian

CONCEDER SELECCIONAR, INSERTAR EN Órdenes A Adrian; o para Adrian y Diane GRANT SELECT, INSERT ON Orders TO Adrian, Diane;

Cuando los privilegios y los usuarios se enumeran de esta manera, la lista completa de privilegios se otorga a todos los usuarios especificados. En una interpretación ANSI estricta, no puede otorgar privilegios en muchas tablas a la vez con un solo comando, pero algunas implementaciones pueden relajar esta restricción al permitirle especificar varias tablas, separadas por comas, de modo que se pueda otorgar la lista completa de privilegios para todas. tablas especificadas. .

LIMITACIÓN DE PRIVILEGIOS EN COLUMNAS ESPECÍFICAS

Todos los privilegios de objetos utilizan la misma sintaxis, excepto los comandos ACTUALIZAR y REGERNCES, que no requieren nombres de columnas. El privilegio ACTUALIZAR se puede otorgar como otros privilegios:

OTORGAR ACTUALIZACIÓN SOBRE Vendedores A Diane;

Este comando le permitirá a Diane cambiar los valores en cualquiera o todas las columnas de la tabla de Proveedores. Sin embargo, si Adrian quiere impedir que Diane cambie, por ejemplo, las comisiones, puede introducir

OTORGAR ACTUALIZACIÓN (com) SOBRE Vendedores A Diane;

En otras palabras, simplemente debe especificar la columna específica sobre la cual se debe aplicar el privilegio ACTUALIZAR, entre paréntesis después del nombre de la tabla. Los nombres de varias columnas de la tabla se pueden especificar en cualquier orden, separados por comas:

OTORGAR ACTUALIZACIÓN (ciudad, comunicación) SOBRE Vendedores A Diane;

REFERENCIAS sigue la misma regla. Cuando otorga el privilegio REFERENCIAS a otro usuario, este podrá crear claves externas que hagan referencia a columnas en su tabla como claves principales. Al igual que ACTUALIZAR, el privilegio REFERENCIAS se puede especificar como una lista de una o más columnas para las cuales ese privilegio está restringido. Por ejemplo, Diane podría otorgarle a Stephen el derecho de usar la tabla Cliente como tabla de claves principal con el siguiente comando:

CONCEDER REFERENCIAS (cname, cnum) SOBRE Clientes A Stephen; Este comando le da a Stephen el derecho de usar las columnas cnum y cname como claves principales para cualquier clave externa en sus tablas. Stephen puede controlar cómo se hace esto. Puede definir (cname, cnum) o, en nuestro caso, (cnum, cname), como una clave principal de dos columnas que coincide con una clave externa para dos columnas en una de sus propias tablas. O puede crear claves foráneas independientes para hacer referencia al género individualmente, asegurando así que Diane tenga asignada una clave principal (consulte el Capítulo 19).

Sin restricciones en los números de clave externa, debe basarse en estas claves principales y se debe permitir que las claves principales de diferentes claves externas se superpongan.

Al igual que con el privilegio ACTUALIZAR, puede excluir una lista de columnas y así permitir que todas las columnas se utilicen como claves principales. Adrian puede otorgarle a Diane el derecho de hacer esto con el siguiente comando:

OTORGAR REFERENCIAS SOBRE Vendedores A Diane;

Naturalmente, el privilegio solo se podrá utilizar en columnas que tengan las restricciones requeridas por las claves principales.

UTILIZANDO TODOS LOS ARGUMENTOS PÚBLICOS

SQL admite dos argumentos para el comando GRANT que tienen un significado especial: TODOS LOS PRIVILEGIOS, o simplemente TODOS y PÚBLICO. ALL se utiliza en lugar de nombres de privilegios en el comando GRANT para otorgar todos los privilegios en una tabla. Por ejemplo, Diane podría darle a Stephen todo el conjunto de privilegios en la tabla Clientes con el siguiente comando:

OTORGAR REFERENCIAS SOBRE Vendedores A Diane;

(Los privilegios de ACTUALIZACIÓN y REFERENCIAS se aplican naturalmente a todas las columnas). Aquí hay otra forma de decir lo mismo:

OTORGAR TODOS LOS CLIENTES A Stephen;

PUBLIC se parece más a un tipo de argumento general que a un privilegio de usuario. Cuando otorga privilegios de publicación, todos los usuarios los reciben automáticamente. En la mayoría de los casos, esto se utiliza para el privilegio SELECT en determinadas tablas o vistas subyacentes que desea poner a disposición de cualquier usuario. Para permitir que cualquier usuario vea la tabla Pedido, podría, por ejemplo, ingresar lo siguiente:

OTORGAR SELECCIÓN EN PEDIDOS AL PÚBLICO;

Por supuesto, puedes otorgar alguno o todos los privilegios a la sociedad, pero probablemente esto no sea aconsejable. Todos los privilegios excepto SELECT permiten al usuario cambiar (o, en el caso de REFERENCIAS, restringir) el contenido de la tabla. Permitir que todos los usuarios cambien el contenido de sus tablas causará un problema.

Incluso si tiene una empresa pequeña y todos sus usuarios actuales son capaces de ejecutar comandos de modificación en una tabla determinada, sería mejor otorgar privilegios a cada usuario individualmente que otorgar los mismos privilegios a todos. PUBLIC no se limita a transferirlo únicamente a los usuarios actuales. Cualquier Nuevo Usuario agregado a su sistema recibirá automáticamente todos los privilegios previamente asignados a todos, por lo que si desea limitar el acceso a la mesa a todos, ahora o en el futuro, es mejor otorgar privilegios distintos de SELECT a usuarios individuales.

OTORGAR PRIVILEGIOS USANDO CON OPCIÓN GRANT

A veces, el creador de una tabla quiere que otros usuarios puedan obtener privilegios en su tabla. Esto generalmente se hace en sistemas donde una o más personas crean varias (o todas) las tablas base en una base de datos y luego delegan la responsabilidad de ellas a quienes realmente trabajarán con ellas. SQL le permite hacer esto usando la cláusula CON GRANT OPTION. Si Diane quisiera que Adrian pudiera otorgar el privilegio SELECT en la tabla Clientes a otros usuarios, le otorgaría el privilegio SELECT usando la cláusula FROM GRANT OPTION:

CONCEDER SELECCIÓN DE Clientes A Adrian CON OPCIÓN DE CONCESIÓN; Luego, Adrian adquirió el derecho de transferir el privilegio SELECT a terceros; puede emitir el comando GRANT SELECT ON Diane.Clientes A Stephen; o incluso CONCEDER SELECCIÓN A Diane.Clientes A Stephen CON OPCIÓN DE CONCESIÓN; Un usuario con GRANT OPTION en un privilegio particular en una tabla determinada puede, a su vez, otorgar ese privilegio en la misma tabla, con o sin GRANT OPTION, a cualquier otro usuario. Esto no cambia la propiedad de la tabla en sí; Como antes, la tabla pertenece a su creador. (Por lo tanto, los usuarios autorizados deben anteponer el ID de acceso del propietario al hacer referencia a estas tablas. El próximo capítulo le mostrará este método). Un usuario que utilice la OPCIÓN GRANT en todos los privilegios para una tabla determinada tendrá autoridad total en esa tabla.

CANCELACIÓN DE PRIVILEGIOS

Así como ANSI proporciona el comando CREATE TABLE para crear una tabla, en lugar del comando DROP TABLE para deshacerse de ella, el comando GRANT le permite otorgar privilegios a los usuarios sin proporcionar una forma de recuperarlos. La necesidad de eliminar privilegios se reduce al comando REVOKE, que en realidad es una herramienta estándar con una forma de entrada bastante clara. La sintaxis del comando REVOKE es similar a GRANT, pero tiene el significado opuesto. Para eliminar el privilegio INSERTAR para Adrian en la tabla Orden, puede ingresar

REVOCAR INSERTAR EN Órdenes DE Adrian;

Aquí se permite el uso de listas de privilegios y usuarios al igual que con GRANT, por lo que puedes ingresar el siguiente comando:

REVOCAR INSERTAR, ELIMINAR EN Clientes DE Adrian, Stephen; Sin embargo, aquí hay cierta ambigüedad. ¿Quién tiene derecho a revocar privilegios? ¿Cuándo pierde ese derecho un usuario con derecho a transferir privilegios a otros? ¿Los usuarios a los que les concedió estos privilegios también los perderán? Dado que esta no es una característica estándar, no existen respuestas autorizadas a estas preguntas, pero el enfoque más común es el siguiente: * Los privilegios los revoca el usuario que los otorgó, y la revocación se realizará en cascada, es decir, se propagará automáticamente a todos los usuarios que recibieron el privilegio de él.

USO DE VISTAS PARA FILTRAR PRIVILEGIOS

Puede hacer que las acciones de privilegios sean más precisas mediante el uso de vistas. Siempre que otorga un privilegio en una tabla base a un usuario, se propaga automáticamente a todas las filas y, cuando se utilizan las posibles excepciones ACTUALIZAR y REFERENCIAS, a todas las columnas de la tabla. Al crear una vista que haga referencia a la tabla subyacente y luego transfiera el privilegio a la vista en lugar de a la tabla, puede restringir esos privilegios a cualquier expresión de la consulta contenida en la vista. Esto mejora enormemente las capacidades básicas del comando GRANT.

¿QUIÉN PUEDE REALIZAR PRESENTACIONES?

Para crear una vista, debe tener el privilegio SELECT en todas las tablas a las que hace referencia en la vista. Si la vista se puede modificar, todos los privilegios INSERTAR, ACTUALIZAR y ELIMINAR que tenga en la tabla base se transferirán automáticamente a la vista. Si no tiene privilegios de modificación en las tablas base, no podrá tenerlos en las vistas que cree, incluso si esas vistas son modificables. Debido a que las claves externas no se usan en las vistas, el privilegio REFERENCIAS nunca se usa al crear vistas. Todas estas restricciones están definidas por ANSI. También se pueden habilitar privilegios del sistema no estándar (que se analizan más adelante en este capítulo). En las siguientes secciones, asumiremos que los creadores de las vistas que analizamos tienen privilegios privados o apropiados en todas las tablas subyacentes.

LIMITACIÓN DEL PRIVILEGIO DE SELECCIÓN EN COLUMNAS ESPECÍFICAS

Supongamos que desea darle al usuario Claire la capacidad de ver solo las columnas snum y sname de la tabla Ventas. Puede hacer esto poniendo los nombres de estas columnas en la vista.

CREAR VISTA Clairesview COMO SELECCIONAR snum, sname DE Vendedores; y conceda a Claire el privilegio SELECT en la vista en lugar de en la propia tabla de Vendedores: GRANT SELECT On Clairesview to Claire; Puede crear privilegios específicamente para columnas, como usar otros privilegios, pero para un comando INSERT esto insertará valores predeterminados y para un comando DELETE, la restricción de columna no tendrá ningún efecto. Los privilegios REFERENCIAS y ACTUALIZAR pueden, por supuesto, hacer que las columnas sean específicas sin recurrir a una vista.

LIMITACIÓN DE PRIVILEGIOS PARA CADENAS ESPECÍFICAS Normalmente, una forma más útil de filtrar privilegios con vistas es utilizar la vista para que el privilegio se aplique sólo a determinadas filas. Esto se hace de forma natural utilizando un predicado en la vista que determinará qué filas se incluyen. Para darle al usuario Adrian el privilegio ACTUALIZAR en la tabla Clientes para todos los clientes ubicados en Londres, puede crear una vista como esta:

CREAR VISTA Londoncust COMO SELECCIONAR * DE Clientes DONDE ciudad = "Londres" CON OPCIÓN DE VERIFICACIÓN; Luego debe otorgar el privilegio ACTUALIZAR en esta tabla a Adrian: OTORGAR ACTUALIZACIÓN EN Londoncust A Adrian; Esta es la diferencia entre el privilegio para ciertas filas y el privilegio ACTUALIZAR para ciertas columnas, que se aplica a todas las columnas de la tabla Clientes, pero no a las filas, entre las cuales las filas con un valor de género de ciudad distinto de Londres no se tendrán en cuenta. . La cláusula CON OPCIÓN DE VERIFICACIÓN impide que Adrian cambie el valor de género de la ciudad a cualquier otra que no sea Londres. PROPORCIONAR ACCESO ÚNICAMENTE A LOS DATOS EXTRAÍDOS Otra posibilidad es ofrecer a los usuarios acceso a los datos que ya se han recuperado, en lugar de a los valores reales de la tabla. Las funciones agregadas pueden resultar muy convenientes al utilizar este método. Puede crear una vista que proporcione el recuento, el promedio y el total de los pedidos para cada día del pedido: CREAR VISTA Datetotals AS SELECT odate, COUNT (*), SUM (amt), AVG (amt) FROM Orders GROUP BY odate; Ahora otorga al usuario Diane el privilegio SELECT en la vista Datetotals: GRANT SELECT ON Datetotals TO Diane; USO DE REPRESENTACIONES COMO ALTERNATIVA A LAS RESTRICCIONES Una de las últimas aplicaciones de la serie, descrita en el Capítulo 18, es el uso de vistas con CON OPCIÓN DE VERIFICACIÓN como alternativa a las restricciones. Supongamos que desea asegurarse de que todos los valores de género de ciudad en la tabla Proveedores estén en una de las ciudades donde su empresa tiene actualmente una oficina. Puede establecer una restricción CHECK directamente en la columna de la ciudad, pero puede resultar difícil cambiarla más adelante si su empresa abre otros departamentos allí, por ejemplo. Alternativamente, puede crear una vista que excluya valores de ciudades no válidos: CREAR VISTA Curcities COMO SELECCIONAR * DESDE Vendedores DONDE ciudad EN ("Londres", "Roma", "San José", "Berlín") CON OPCIÓN DE VERIFICAR; Ahora, en lugar de otorgar a los usuarios privilegios de modificación en la tabla Comerciantes, puede otorgarlos en la vista Curcities. La ventaja de este enfoque es que si necesita realizar un cambio, puede eliminar esa vista, crear una nueva y otorgar privilegios a los usuarios en esa nueva vista, lo cual es más fácil que cambiar las restricciones. La desventaja es que el propietario de la tabla Ventas también debe utilizar esta vista si no quiere que se rechacen sus propios comandos. Por otro lado, este enfoque permite al propietario de la tabla y a cualquier otra persona obtener privilegios de modificación en la tabla misma, en lugar de en la vista, para hacer excepciones a las restricciones.

Esto suele ser deseable, pero no factible si utiliza restricciones en la tabla base. Lamentablemente, estas excepciones no serán visibles en la vista. Si elige este enfoque, querrá crear una segunda vista que contenga solo excepciones: CREAR VISTA Otras ciudades COMO SELECCIONAR * DESDE Vendedores DONDE ciudad NO EN ("Londres", "Roma", "San José", "Berlín") CON CONSULTAR OPCIÓN; Debe optar por otorgar a los usuarios solo el privilegio SELECT en esta vista para que puedan ver las filas excluidas pero no puedan colocar valores de ciudad no válidos en la tabla subyacente. De hecho, los usuarios pueden consultar ambas vistas en una unión y ver todas las filas a la vez.

OTROS TIPOS DE PRIVILEGIOS

Por supuesto, usted quiere saber primero quién tiene derecho a crear la tabla. Esta área de privilegio no es ANSI, pero no se puede ignorar. Todos los privilegios ANSI estándar se derivan de este privilegio; privilegios de los creadores de tablas que pueden transferir privilegios de objetos. Si todos sus usuarios crean tablas base en el sistema con diferentes tamaños esto conducirá a redundancia en ellos y a ineficiencia del sistema. Otras preguntas también llaman la atención:

¿Quién tiene derecho a cambiar, eliminar o limitar tablas?

¿Los derechos para crear tablas base deberían ser diferentes de los derechos para crear vistas?

¿Debería haber un superusuario, un usuario responsable de mantener la base de datos y, por tanto, que tenga la mayoría o todos los privilegios que no se conceden individualmente?

Hasta que ANSI esté involucrado y SQL se utilice en una variedad de entornos, no podemos dar una respuesta definitiva a estas preguntas. Proponemos considerar aquí una parte de las conclusiones más generales.

Los privilegios que no están definidos en términos de objetos de datos especiales se denominan privilegios del sistema o derechos de base de datos. En un nivel básico, es probable que incluyan el derecho a crear objetos de datos, probablemente distintos de las tablas base (normalmente creadas por unos pocos usuarios) y vistas (normalmente creadas por la mayoría de los usuarios). Los privilegios del sistema para crear vistas deben ser adicionales, y no en lugar de, los privilegios de objeto que ANSI requiere de los creadores de vistas (descritos anteriormente en este capítulo). Además, en un sistema de cualquier tamaño siempre hay algunos tipos de superusuarios (usuarios que automáticamente tienen la mayoría o todos los privilegios) y que pueden transferir su estado de superusuario a otra persona a través de un privilegio o grupo de privilegios. Administrador de base de datos, o DBA, es el término más comúnmente utilizado para dicho superusuario y los privilegios que tiene.

PRIVILEGIOS TÍPICOS DEL SISTEMA

En un enfoque general, existen tres privilegios básicos del sistema: - CONECTAR, - RECURSO y - DBA (Administrador de base de datos). En términos más simples, se puede decir que CONNECT consiste en el derecho a registrarse y el derecho a crear vistas y sinónimos (ver Capítulo 23) si se pasan los privilegios del objeto. RECURSO consiste en el derecho a crear tablas base. DBA es un privilegio de superusuario que otorga al usuario alta autoridad en la base de datos. Uno o más usuarios con funcionalidad de administrador de base de datos pueden tener este privilegio. Algunos sistemas también tienen un usuario especial, a veces llamado SYSADM o SYS (Administrador de base de datos del sistema), que tiene la máxima autoridad; es especial para ellos, y no sólo para un usuario con privilegios especiales de DBA. De hecho, sólo una persona puede registrarse con el nombre SYSADM, que es su ID de acceso. La distinción es bastante sutil y funciona de manera diferente en diferentes sistemas. Para nuestros propósitos, nos referiremos a un usuario altamente privilegiado que desarrolla y administra una base de datos con privilegios de DBA, entendiendo que en realidad estos privilegios son el mismo privilegio. El comando GRANT, en forma modificada, se puede utilizar con privilegios de objeto y con privilegios del sistema. Para empezar, la transferencia de derechos se puede realizar mediante un DBA. Por ejemplo, un DBA podría otorgar privilegios de creación de tablas a Rodríguez de la siguiente manera: OTORGAR RECURSO A Rodríguez;

CREAR Y ELIMINAR USUARIOS

Naturalmente surge la pregunta: ¿de dónde viene un usuario llamado Rodríguez? ¿Cómo determinar su ID de autorización? En la mayoría de las implementaciones, el DBA crea el usuario otorgándole automáticamente el privilegio CONNECT. En este caso se suele añadir una cláusula IDENTIFICADA POR para indicar la contraseña. (De lo contrario, el sistema operativo debe determinar si puede iniciar sesión en la base de datos con el ID de acceso proporcionado). El DBA podría, por ejemplo, emitir GRANT CONNECT TO Thelonius IDENTIFIED BY Redwagon; lo que creará un usuario llamado Thelonius, le dará derecho a registrarse y le asignará la contraseña Redwagon, todo en una sola frase. Dado que Thelonious ya es un usuario autenticado, él o el DBA pueden usar este mismo comando para cambiar la contraseña de Redwagon. Aunque esto es conveniente, todavía existen limitaciones en este enfoque. Se trata de la imposibilidad de tener un usuario que no pudo registrarse, al menos temporalmente. Si desea evitar que un usuario inicie sesión, debe utilizar el privilegio CONNECT en REVOKE, que "elimina" a ese usuario. Algunas implementaciones le permiten crear y eliminar usuarios, independientemente de sus privilegios de inicio de sesión. Cuando otorga el privilegio CONNECT a un usuario, crea ese usuario. Además, para hacerlo usted mismo, debe tener privilegios de DBA. Si este usuario va a crear tablas base (no solo vistas), también se le debe otorgar el privilegio RECURSO. Pero esto da lugar inmediatamente a otro problema. Si intenta eliminar el privilegio CONNECT de un usuario que tiene tablas creadas por él, el comando será rechazado porque dejaría la tabla sin propietario, lo cual no está permitido. Primero debe eliminar todas las tablas creadas por este usuario antes de eliminar su privilegio CONNECT. Si estas tablas no están vacías, probablemente querrás pasar sus datos a otras tablas usando el comando INSERT, que utiliza una consulta. No es necesario eliminar el privilegio RESOURSE por separado; Basta con eliminar CONNECT para eliminar al usuario. Si bien lo anterior es un enfoque bastante estándar para los privilegios del sistema, también tiene limitaciones importantes. Han surgido enfoques alternativos que están definidos más específicamente y controlan los privilegios del sistema con mayor precisión.

Estas conclusiones nos llevan un poco más allá del estándar SQL tal como se define actualmente y, en algunas implementaciones, pueden ir más allá del estándar SQL por completo. Estas cosas probablemente no le preocuparán demasiado a menos que sea un DBA o un usuario. nivel alto. Los usuarios habituales simplemente necesitan familiarizarse con los privilegios del sistema en principio, consultando su documentación sólo en caso de mensajes especiales.

RESUMEN

Los privilegios le brindan la posibilidad de ver SQL desde una nueva perspectiva cuando SQL realiza acciones a través de usuarios especiales en un sistema de base de datos especial. El comando GRANT en sí es bastante simple: con su ayuda, otorgas ciertos privilegios de un objeto a uno o más usuarios. Si otorga el privilegio CON GRANT OPTION a un usuario, ese usuario a su vez puede otorgar ese privilegio a otros. Ahora comprende las sugerencias sobre el uso de privilegios en las vistas (para mejorar los privilegios en las tablas base o como alternativa a las restricciones) y algunas de las ventajas y desventajas de este enfoque. Los privilegios del sistema que son necesarios pero que no están dentro del alcance del estándar SQL se han analizado en su forma más general y, por lo tanto, los aprenderá mediante la práctica. El Capítulo 23 continuará la discusión sobre la inferencia en SQL, como guardar o restaurar cambios, crear sus propios nombres para tablas propiedad de otras personas y comprender qué sucede cuando diferentes usuarios intentan acceder al mismo objeto al mismo tiempo.

TRABAJANDO CON SQL

1. Otorgue a Janet el derecho de cambiar la calificación del cliente.

2. Otorgue a Stephan el derecho de otorgar a otros usuarios el derecho de realizar consultas en la tabla de Pedidos.

3. Elimine el privilegio INSERT en la tabla Proveedores de Claire y de todos los usuarios a quienes se les concedió.

4. Otorgue a Jerry el derecho de insertar o modificar la tabla Clientes conservando su capacidad de evaluar valores en el rango de 100 a 500.

5. Permita que Janet consulte la tabla Cliente, pero evite que disminuya las calificaciones en la misma tabla Cliente.

La plataforma SQL Server utiliza la declaración REVOKE como una forma de revocar la configuración de permisos asignada a un usuario determinado. Este punto es importante porque SQL Server admite una declaración DENY adicional que deniega explícitamente el acceso de un usuario a un recurso específico. En SQL Server, la declaración REVOKE se puede usar para revocar privilegios asignados a un usuario mediante la declaración GRANT. Si desea negar explícitamente a un usuario un determinado privilegio, debe utilizar la declaración DENY.

La plataforma SQL Server no admite las cláusulas ANSI HIERARCHY OPTION y ADMIN OPTION. Aunque la cláusula ADMIN OPTION no es compatible, la versión de SQL Server del comando REVOKE tiene dos privilegios administrativos (CREATE y BACKUP). La sintaxis de las instrucciones es la siguiente.

REVOCAR ([privilegio_objeto] [, ...] | [privilegio_sistema]) [(columna [, ...])]]| (PARA | DESDE) (nombre_destinatario [,…] | rol [,…] | PÚBLICO | INVITADO) ]

OPCIÓN DE SUBVENCIÓN PARA

El usuario se ve privado del derecho de asignar privilegios específicos a otros usuarios.

privilegio de objeto

Se revocan los derechos de acceso a distintas instrucciones que pueden combinarse en cualquier orden.

TODO

Todos los privilegios asignados en actualmente usuarios específicos y/o para objetos de base de datos específicos. Se desaconseja esta sugerencia porque promueve la ambigüedad en la programación.

(SELECCIONAR | INSERTAR ELIMINAR ACTUALIZACIÓN)

Al usuario especificado se le niega el privilegio de acceso especificado en el objeto especificado (por ejemplo, una tabla o vista). Para revocar privilegios a nivel de columna, utilice una lista de columnas entre paréntesis.

REFERENCIAS

Se revoca el derecho a crear y eliminar restricciones de clave externa que hacen referencia a un objeto de base de datos como objeto principal.

Se revoca el derecho del usuario a crear o eliminar una regla en una tabla o vista.

Se revoca el derecho a ejecutar un procedimiento almacenado, una función definida por el usuario o un procedimiento almacenado extendido.

privilegio del sistema

Se revoca el derecho a ejecutar las siguientes declaraciones: CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, BACKUP DATABASE y BACKUP LOG.

EN [objeto] [(columna [, ...])]

Se revoca el derecho de acceso del usuario al objeto especificado. Si el objeto es una tabla o vista, puede revocar los privilegios de acceso en columnas individuales. Puede revocar los privilegios SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR y REFERENCIAS en una tabla o vista. En las columnas de tabla o vista, solo puede revocar los privilegios SELECCIONAR y ACTUALIZAR. Puede revocar los privilegios de EJECUCIÓN en un procedimiento almacenado, una función definida por el usuario o un procedimiento almacenado extendido.

[PARA | DE] nombre del destinatario | papel | PÚBLICO | INVITADO

Especifica los usuarios o roles que pierden el privilegio especificado. Puede utilizar la palabra clave PUBLIC para revocar los privilegios asignados al rol PUBLIC (que incluye a todos los usuarios). Puede enumerar varios destinatarios, separando sus nombres con comas. También compatible con SQL Server Cuenta INVITADO, que es utilizado por todos los usuarios que no tienen su propia entrada en la base de datos.

Se eliminan los privilegios de los usuarios que recibieron sus derechos a través de la cláusula CON GRANT OPTION. Esta cláusula es necesaria cuando se utiliza la cláusula GRANT OPTION FOR.

AS (nombre_grupo nombre_rol)

Se indican los derechos bajo los cuales se revoca el privilegio. En algunos casos, un usuario puede necesitar temporalmente los derechos de un grupo específico para anular los privilegios especificados. En este caso, puede utilizar la cláusula AS para obtener dichos derechos.

Las dos formas de la declaración REVOKE, REVOKE privilegio de objeto y REVOKE privilegio_sistema, son mutuamente excluyentes. No intente realizar ambas operaciones en una sola declaración. La diferencia sintáctica clave entre los dos es que no debe utilizar la cláusula ON al eliminar privilegios del sistema. Por ejemplo, para eliminar un privilegio del sistema, puede utilizar el siguiente comando.

REVOCAR CREAR BASE DE DATOS, RESPALDAR LA BASE DE DATOS DE dylan, katie

Si se asignaron privilegios a un usuario mediante la cláusula CON GRANT OPTION, entonces estos privilegios deben revocarse mediante el uso simultáneo de dos cláusulas: CON GRANT OPTION y CASCADE. Por ejemplo:

REVOCAR LA OPCIÓN DE CONCESIÓN PARA SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR EN títulos A los editores CASCADE GO

El comando REVOKE solo se puede utilizar en la base de datos actual. En consecuencia, las opciones estándar ANSI CURRENTJJSER y CURRENTROLE siempre se asumen implícitamente. La declaración REVOKE también se utiliza para cancelar todas las opciones DENY.

La plataforma SQL Server también admite una declaración DENY adicional. La sintaxis de la declaración DENY es idéntica a la sintaxis de la declaración REVOKE. Sin embargo, en esencia, se diferencian en que REVOKE neutraliza los privilegios del usuario, mientras que DENY los prohíbe explícitamente. Utilice la declaración DENY para denegar a un usuario o rol el acceso a un privilegio, incluso si el privilegio se otorga explícitamente o mediante la asignación de roles.

La declaración REVOKE debe usarse para eliminar privilegios previamente otorgados o DENY. Por ejemplo, la usuaria Kelly se tomó una licencia de maternidad prolongada. Durante este tiempo, se le negó el acceso a la mesa de empleados. Ella regresó y volvimos a otorgar privilegios.

NEGAR TODO AL empleado A Kelly GO

REVOCAR TODOS LOS Empleados A Kelly GO

En este ejemplo, el comando REVOKE no elimina sus privilegios; anula el comando DENY.

La creación de un usuario en sí misma no le otorga ningún derecho para acceder a los objetos de la base de datos.

Los permisos se otorgan mediante el comando GRANT. Cabe recordar que el usuario que emite el comando GRANT puede transferir o, si lo prefiere, delegar a otros usuarios sólo aquellos derechos que él mismo tiene.

GRANT establece derechos sobre los objetos de la base de datos para usuarios, roles u otros objetos de la base de datos. Cuando se crea un objeto, sólo su creador tiene derechos sobre él, y sólo él puede conceder derechos a otros usuarios u objetos.

Para acceder a una tabla o vista, el usuario u objeto necesita derechos de SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR o REFERENCIAS. Todos los derechos se pueden otorgar con la opción TODOS.

Para llamar a un procedimiento en una aplicación, el usuario debe tener derechos de EJECUCIÓN.

Los usuarios pueden obtener permiso para otorgar derechos a otros usuarios transfiriendo derechos de acuerdo con la lista , que se especifica mediante la opción CON GRANT OPTION. El usuario puede conceder a otros sólo aquellos derechos que él mismo tiene.

Se pueden otorgar permisos a todos los usuarios utilizando la opción PÚBLICA en lugar de la lista de nombres de usuario. La especificación de la opción PUBLIC afecta sólo a los usuarios, no a los objetos de la base de datos.

La lista de derechos se da en la tabla. 8.5.

Tabla 8.5. Lista de derechos

Los derechos pueden ser revocados por el usuario que los otorgó mediante el comando REVOKE. Si los derechos se emitieron usando ALL, entonces solo se pueden liquidar en modo ALL; si los derechos se emitieron usando PUBLIC, entonces solo se pueden liquidar en modo PUBLIC.

Sintaxis:

CONCEDER (todos /PRIVILEGIOS] / LJST_ ) EN LA MESA ]

(nombre de tabla/nombre de vista)

A( /LISTA_ /GRUPO UNIX_grupo^

/EJECUTAR EN EL PROCEDIMIENTO procname A

(LISTA_ LISTA_ (CON OPCIÓN DE SUBVENCIÓN./)

ILJST_rolename A (PÚBLICO

/LISTA_ (CON OPCIÓN ADKIN]);

;;= SELECCIONAR / BORRAR / INSERTAR / ACTUALIZAR [ (LISTA_col) ] j REFERENCIAS PT5T_co1) ]

; . = PROCEDIMIENTO procname j DISPARADOR trigname j VER nombre de vista / PÚBLICO

;:= nombre de usuario y nombre de rol

::= nombre de usuario

Tabla 8.6. Descripción de los elementos de sintaxis del comando GRANT

Argumento Descripción
privilegio El nombre del derecho concedido. Valores válidos: SELECCIONAR, ELIMINAR, INSERTAR, ACTUALIZAR, REFERENCIAS
Columna El nombre de la columna a la que se otorgan derechos.
Nombre de la tabla Nombre de la tabla existente a la que se aplican los derechos
Nombre de vista Nombre de la reseña existente que está sujeta a derechos
El nombre de un objeto de base de datos existente (procedimiento, revisión, activador) al que se aplican los derechos.
nombre de usuario Nombre del usuario al que se transfieren los derechos
CON OPCIÓN DE SUBVENCIÓN Otorga permisos de transferencia a los usuarios enumerados en LIST_
nombre de rol Nombre de un rol existente creado por el comando CREATE ROLE
El usuario al que se asignan los derechos de rol. La lista de usuarios debe especificarse en isc4.gdb (creado, por ejemplo, por la utilidad IBConsole)
GRUPO unix_group Nombre del grupo UNIX definido en /etc/group

El siguiente comando otorga derechos SELECCIONAR y ELIMINAR al usuario. La opción CON OPCIÓN DE SUBVENCIÓN otorga el derecho a su posterior transferencia.

Ejemplo 8.5

Y este comando otorga el derecho de ejecutar un procedimiento a otro procedimiento y usuario.

Ejemplo 8.6

CONCEDER EJECUTAR EL AUTOR DEL PROCEDIMIENTO AL AUTOR DEL LIBRO DEL PROCEDIMIENTO, MISHA;

En este caso, transferir derechos sobre el procedimiento PBOOKAUTHOR en nuestra base de datos no tiene sentido, ya que simplemente no utiliza el procedimiento PAUTHOR, pero sintácticamente es bastante correcto.

El siguiente comando es completamente similar en contenido al Ejemplo 8.5, pero se centra en el uso de SQL incorporado.

Ejemplo 8.7 EXEC SQL

CONCEDER SELECCIONAR, ELIMINAR EN TBOOK A MISHA CON OPCIÓN DE CONCEDER;

Liquidación de derechos. comando REVOCAR

REVOKE elimina los derechos de acceso a los objetos de la base de datos. Los derechos son acciones con un objeto que están permitidas al usuario. Los derechos SQL se describen en la tabla. 8.7.

Hay algunas limitaciones a tener en cuenta al utilizar el comando REVOKE. Sólo el usuario que los emitió puede liquidar derechos. A un usuario se le pueden asignar los mismos derechos a un objeto de base de datos de cualquier número de usuarios diferentes. El comando REVOKE implica la privación de derechos previamente otorgados por este usuario en particular. Los derechos otorgados a todos los usuarios por la opción PUBLIC solo pueden revocarse mediante el comando REVOKE con la opción PUBLIC. Sintaxis:

REVOCAR nombre de usuario / PÚBLICO ::= /"USER7 nombre de usuario

El siguiente comando elimina los derechos del usuario para eliminar de la tabla (ver ejemplo 8.5, en este caso todavía tiene derechos de lectura).

Ejemplo 8.8

REVOCAR ELIMINAR EL TOMADO DE MISHA;

Y este comando revoca el derecho de ejecutar un procedimiento de otro procedimiento y usuario (ver resaltado de los derechos correspondientes en el ejemplo 8.6)

REVOCAR .EJECUTAR EN EL PROCEDIMIENTO PAUTOR DESDE EL PROCEDIMIENTO PBOOKAUTHOR, MISHA;

 Arriba