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.
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.