tiene tablas son que porque permisos otorgar objeto los existe esquemas encuentra definicion datos crear creacion administrador sql security tsql sql-server-2008

tablas - que son los permisos en sql server



Otorgar permiso SELECT en una vista, pero no en objetos subyacentes (3)

A menudo leo que el único propósito de una VISTA es la seguridad: permitir que algunos usuarios accedan a la tabla subyacente, y otros usuarios a una vista derivada solamente. Con esto en mente, diseñé varias vistas que suministran conjuntos de datos restringidos a usuarios externos.

Todo muy bien, pero en la práctica esto no funciona. Después de otorgar el permiso SELECT en una vista, los usuarios no pueden acceder a ella a menos que conceda SELECT en todos los objetos subyacentes también. La misma historia para los procedimientos almacenados. El resultado neto no es funcional, ya que al final sigo otorgando acceso a datos confidenciales a los usuarios equivocados, además de ser molesto, ya que es fácil olvidar un objeto y los usuarios vuelven a quejarse de que la vista "no funciona". trabajo".

¿Hay alguna forma de otorgar permisos SELECT en una vista o procedimiento almacenado sin tener que exponer los objetos subyacentes también?


¿El mismo usuario que posee la vista también posee las tablas subyacentes? De lo contrario, el propietario de las tablas debe otorgar permiso al propietario de la vista CON LA OPCIÓN DE SUBVENCIÓN. Si el mismo usuario posee tanto las tablas como la vista, otorgar permiso a la vista debería ser suficiente.


Es posible que encuentre útil la información en este foro .

La última publicación contiene los detalles de lo que se ejecutó para otorgar permisos a una vista, pero no a las tablas subyacentes:

CREATE USER [Reports] FOR LOGIN [Reports] WITH DEFAULT_SCHEMA = Reports CREATE SCHEMA Reports AUTHORIZATION Reports --Auth as Reports was the key piece of information that I had missed. GO CREATE ROLE Reporting AUTHORIZATION db_securityadmin GO exec sp_addrolemember @rolename = ''Reporting'', @membername = ''Reports'' GO GRANT CREATE VIEW TO Reporting GRANT CREATE TABLE TO Reporting GRANT SELECT, VIEW DEFINITION ON [dbo].[zName] TO Reporting;

FYI - Para procedimientos almacenados, debe otorgar EXEC al procedimiento.


Si tiene sus vistas en un esquema diferente al de la tabla, debe otorgarle al usuario acceso a la tabla base, "AUTORIZAR" al propietario de las tablas a la vista de esta manera:

ALTER AUTHORIZATION ON reporting.MyViewName TO dbo

En el ejemplo anterior, dbo es el usuario propietario de las tablas que reporting.MyViewName MyViewName está accediendo