26 de enero de 2011

Permisos en SQL Server 2000


Hace unos días me vi en la necesidad de crear diferentes funciones de usuarios para la Base de Datos (BD), en donde una función requería tener acceso sólo a unas tablas y otras funciones a otras tablas. El caso aquí es que el sistema que accede a esta BD se maneja por medio de Stores Procedures (SP), para lo cual investigué (mediante prueba y error) si es necesario asignar todos los permisos de SELECT, INSERT y DELETE a las tablas que se mandan llamar de los SP o si solo asignando el permiso de EXECUTE era suficiente.

Resultados:

  • Al habilitar el permiso de EXECUTE del SP se heredan los permisos a lo que se ejecute dentro (INSERT, UPDATE y DELETE), por lo tanto solo es necesario asignar estos permisos en los SP y no en todas las tablas.
  • No se pueden realizar ALTER y DROP a objetos de otro owner, solo se podrá hacer a los objetos creados por el mismo usuario. Ejemplo: Si nuestro usuario es [Prueba] y si dentro de un SP se realiza un DROP o ALTER al objeto [dbo].[Tabla], no se podría realizar, ya que solo se podría realizar si fuera [Prueba].[Tabla].
  • El permiso de creación de tablas se otorga al usuario mediante la siguiente instrucción:
    • Grant CREATE TABLE To <useraccount>
  • NOTA: Este permiso sólo habilita la creación de tablas que tengan como owner el usuario al cual tiene el permiso, es decir, si se especifica en el CREATE otro owner, como por ejemplo [dbo].[NuevaTabla], arrojaría un error. En este caso solo se tendría que hacer el CREATE TABLE [NuevaTabla] y esto generará la tabla como [usuario].[NuevaTabla].
Observación: Cuando dentro de un SP se manejan consultas dinámicas, por ejemplo:
     Declare @Query as varchar(8000)  --Se declara la variable que se usará para generar el query
     select @Query = 'Select * from Usuarios'  -- Se genera la consulta dinámica
     exec (@Query)  -- Se ejecuta la consulta dinámica
Se observó que es necesario dar los privilegios necesarios para las tablas que se usan en dicho query, en este ejemplo se tendría que otorgar el permiso de SELECT a la tabla "Usuarios".

No hay comentarios.:

Publicar un comentario