Permisos de acceso a objetos
El último filtro en el proceso de seguridad es la posibilidad de habilitar permisos para manejar cada uno de los objetos de una base de datos de SQL Server. Una vez que un login id tiene acceso a una base de datos mediante un username, todavía puede definirse qué sentencias podrá ejecutar y sobre qué objetos de la base de datos.
Existen tres tipos de permisos: de objeto, de sentencia e implícitos
-Permisos de objeto permiten utilizar y modificar los objetos existentes. Por ejemplo, se podrá dar permiso para añadir o eliminar una tabla, o para realizar sobre ella una consulta.
- Permisos de sentencia permiten ejecutarlas, sin limitar ese permiso de ejecución a un objeto en particular. Suelen referirse a sentencias de creación o eliminación de objetos.
- Permisos implícitos. Son los que se da a los miembros de las funciones del servidor preestablecidas (como la sysadmin), y a los propietarios de bases de datos. Este tipo de usuarios tienen permisos no modificables, que son los que entran en la categoría de implícitos.
Arquitectura de permisos
Quién tiene permisos y quién puede otorgarlos
Por defecto, tras la creación de la base de datos sólo el propietario de la base de datos (los miembros de db_owner y los agrupados bajo el usuario dbo) tienen permisos para crear objetos en la misma. Esta facultad no suele transmitirse a otros usuarios, pues se supone que éstos son los únicos con permisos para modificar su estructura.
Una vez se crea un objeto en la base de datos, tan sólo el creador del objeto y los administradores (sysadmin) tienen permisos para manipulado. Por defecto, el administrador posee todos los permisos para todos los objetos.
El comando DENY hace que un usuario no tenga permiso para un acceso a un objeto. El comando REVOKE sólo afecta al usuario o función en que se ejecute, permitiendo que otros comandos GRANT en otras entidades que incluyan al mismo usuario puedan deshacer su efecto.
La tabla sysprotects
Cada vez que se otorga un permiso, se añade una fila a la tabla de sistema sysprotects, presente en todas las bases de datos. Esta tabla contiene las siguientes informaciones:
Id: ID del objeto para el que se otorga permiso.
Uid: ID del usuario o función al que se otorga permiso.
Action: Permiso que se otorga.
Este último puede ser:
REFERENCES
SELECT
INSERT
DELETE
UPDATE
CREATE TABLE
CREATE DATABASE
CREATE VIEW
CREATE PROCEDURE
EXECUTE
BACKUP/RESTORE DATABASE
CREATE DEFAULT
BACKUP/RESTORE LOG
CREATE RULE
Protecttype: Tipo de protección ante la posibilidad de que el permiso pueda transmitirse.
Column: Indica las columnas a las que se aplica el permiso.
Grantor: Identificador del usuario que ejecutó la sentencia GRANT o DENY que motivó que se añadiese la fila de la tabla.
Permisos a objetos
Hay dos formas de dar permisos de acceso a datos, una de ellas es hacerlo a través de permitir, revocar o denegar el trabajo con cada uno de los objetos. Esto permite dar permisos a tablas, columnas de tabla, vistas, etc. Los permisos pueden darse a través del Administrador Corporativo a través de la ejecución de procedimientos almacenados del sistema. Es posible dar permisos para ejecutar las siguientes sentencias sobre cada uno de los objetos.
Permisos para tablas
SELECT
UPDATE
DELETE
INSERT
DRI (Declarative Referential Integrity)
DRI permite crear un objeto que tenga relaciones de integridad referencial con el objeto al que damos permisos.
UPDATE
DELETE
INSERT
DRI (Declarative Referential Integrity)
DRI permite crear un objeto que tenga relaciones de integridad referencial con el objeto al que damos permisos.
Permisos para columnas
SELECT
UPDATE
Permisos para vistas
SELECT
UPDATE
DELETE
INSERT
Permisos para procedimientos almacenados
EXECUTE
Dar permisos a objetos con el Administrador Corporativo
Para dar, denegar o retirar permisos a objetos desde el Administrador Corporativo. Situarse sobre la base de datos en la que se encuentra el objeto.
Situarse sobre el objeto, sea una tabla, una vista o un procedimiento almacenado. Sobre el objeto pulsar botón derecho del ratón lo que muestra el un menú, pulsar en propiedades, esto nos abre un cuadro de diálogo con varias pestañas, entre ellas la de permisos la cual nos muestra los tipos de permiso que tiene el objeto.
Esta pantalla permite conceder o denegar diferentes tipos de permisos para el objeto. Si pulsamos el botón Permisos de Columna, mostrará un cuadro similar en el que podremos dar o denegar permisos a cada columna.
Permisos a objetos con comandos
Los comandos GRANT, DENY y REVOKE permiten realizar las funciones de gestión de permisos
Permisos a objetos con GRANT
Este comando permite dar permisos a un determinado objeto de una base de datos. Su sintaxis es:
GRANT {ALL | lista de permisos} ON [objeto [lista de columnas] TO {lista de funciones y/o usuarios [WITH GRANT OPTION] [AS (grupo | función}]
Algunos aspectos de esta sentencia son:
ALL: Mediante esta opción, el usuario que ejecuta la sentencia transmite todos los permisos que posee a los usuarios que se especifiquen.
Lista de permisos: Los permisos otorgados.
Objetos: Indica el nombre de una tabla, vista, procedimiento almacenado, etc.
Lista de columnas: Columnas a las que se aplicará el permiso, separadas por comas.
WITH GRANT: El usuario que recibe el permiso, lo transmite a otros.
AS: Especifica los usuarios que tienen permiso para ejecutar la sentencia GRANT.
Retirando permisos a objetos con REVOKE
Este comando permite retirar permisos.
REVOKE [{ALL | lista de permisos} ON {objeto [lista de columnas] FROM {lista de grupos y/o usuarios [CASCADE] [AS (grupo | función}]
La sintaxis es prácticamente idéntica a la de GRANT. La única diferencia a destacar es la opción CASCADE. Esta opción se utiliza para retirar aquellos permisos que hayan sido otorgados con la opción GRANT WITH GRANT.
Denegar permisos a objetos con DENY
Este comando permite retirar permisos. Su sintaxis es:
DENY [{ALL | lista de permisos} ON {objeto [lista columnas] FROM {lista de grupos y/o usuarios [CASCADE]
La ejecución de este comando hace que el usuario u objeto al que se aplique no pueda ganar el permiso de manera indirecta a través de un comando GRANT sobre una función a la que pertenezca la entidad.
Permisos a sentencias
Permiten controlar quien puede crear y eliminar objetos de una base de datos. Pueden otorgarse o retirarse permisos a las siguientes sentencias:
CREATE DATABASE
CREATE DEFAULT: Permite especificar un valor por defecto para una columna de una tabla.
CREATE PROCEDURE: Para crear un procedimiento almacenado (stored procedure).
CREATE RULE: Crea una regla de columnas en una tabla.
CREATE TABLE: Para crear una tabla.
CREATE VIEW: Permite crear tina vista.
BACKUP DATABASE: Copia de seguridad de una base de datos.
BACKUP LOG: Copia de seguridad del transartion log.
Permisos a sentencias con el Administrador Corporativo
Para dar o quitar permisos a sentencias desde el Administrador Corporativo seguiremos los siguientes pasos:
Seleccionar una base de datos.
Pulsar su menú contextual con el botón derecho del ratón y propiedades.
Esto abre un cuadro de diálogo, elegimos la pestaña permisos. Modificar los permisos de la manera deseada.
Permisos a sentencias mediante comandos
Otorgando permisos a sentencias con GRANT
La sintaxis simplificada de este comando para dar permisos a sentencias es la siguiente:
GRANT {ALL | lista de sentencias} TO {PUBLIC / lista de usuarios y/o grupos}
Retirar permisos a sentencias con REVOKE
Para retirar permisos a sentencias utilizaremos REVOKE
REVOKE {ALL | lista de sentencias} FROM {PUBLIC / lista de usuarios y/o grupos}
Denegar permisos a sentencias con DENY
No hay comentarios:
Publicar un comentario