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