Se denegó el permiso SELECT en el objeto ''sysobjects'', la base de datos ''mssqlsystemresource'', el esquema ''sys''
sql-server permissions (6)
CONFIGURACIÓN: SQL Server 2005 y DotNetNuke 05.01.02.
Esto comenzó cuando trato de instalar un Módulo DNN que tenía "select * from dbo.sysobjects" en sus scripts SQL. Eso falló con el siguiente error:
Se denegó el permiso SELECT en el objeto ''sysobjects'', la base de datos ''mssqlsystemresource'', el esquema ''sys''.
Inicié sesión en la base de datos a través de SQL Server Management Studio como la cuenta de usuario DNN, y recibo el mismo error cuando intento realizar un SELECCIONAR en la vista de sysobjects.
Traté de otorgarle a la cuenta de usuario DNN un permiso SELECT explícito para esa vista. Cuando lo compruebo, vaya a Seguridad -> Usuarios -> DNNUserLogin-> haga clic con el botón derecho en -> Propiedades -> Garantías y desplácese hacia abajo para encontrar la vista de sys.sysobjects, dice que esta cuenta de usuario tiene permisos explícitos para dbo: Y SELECCIONAR la casilla de verificación está marcada. Pero aún no puedo realizar una selección en la vista de sysobjects como esa cuenta de usuario de DNN.
¿Qué estoy haciendo mal? ¿Cómo puedo hacer que esto funcione?
Ejecute este código en un buen servidor que le proporcionará los derechos completos para la función PUBLIC. Copie la salida y pegue en el servidor con el problema. Ejecutar. Intenta iniciar sesión de nuevo. Solucionó nuestro problema.
SELECT SDP.state_desc ,
SDP.permission_name ,
SSU.[name] AS "Schema" ,
SSO.[name] ,
SSO.[type]
FROM sys.sysobjects SSO
INNER JOIN sys.database_permissions SDP ON SSO.id = SDP.major_id
INNER JOIN sys.sysusers SSU ON SSO.uid = SSU.uid
ORDER BY SSU.[name] ,
SSO.[name]
Este era un problema con el usuario que también tenía privilegios de denegación; en mi prisa por otorgar permisos, básicamente le di todo al usuario. Y negar lo estaba matando. Entonces, tan pronto como eliminé esos permisos, funcionó.
Lo resolví remitiendo las propiedades del usuario de inicio de sesión bajo la seguridad, inicios de sesión. luego vaya a Asignación de usuarios y seleccione la base de datos luego verifique las opciones de db_datareader y db_dataweriter .
Parece que alguien podría haber revocado los permisos en sys.configurations
para la función pública. O denegado el acceso a esta vista a este usuario en particular. O el usuario se ha creado después de que se eliminó la función pública de las tablas sys.configurations
.
Proporcionar permiso SELECT
al objeto público sys.configurations
usuario.
Ya que hay tantas posibilidades para lo que podría estar mal. Aquí hay otra posibilidad de mirar. Me encontré con algo donde había establecido mis propios roles en una base de datos. (Por ejemplo, "Administrador", "Administrador", "Entrada de datos", "Cliente", cada uno con sus propios tipos de limitaciones). Los únicos que podían usarlo eran los de "Gerente" o superior, porque también estaban configurados como sysadmin porque estaban agregando usuarios a la base de datos (y eran altamente confiables). Además, los usuarios que se estaban agregando eran usuarios del Dominio de Windows, utilizando sus credenciales de dominio. (Todos los que tenían acceso a la base de datos tenían que estar en nuestro dominio, pero no todos en el dominio tenían acceso a la base de datos, y solo algunos de ellos tenían acceso para cambiarla).
De todos modos, este sistema de trabajo de repente dejó de funcionar y recibí mensajes de error similares a los anteriores. Lo que terminé haciendo fue resolver todos los permisos del rol "público" en esa base de datos y agregar esos permisos a todos los roles que había creado. Sé que se supone que todos tienen el rol "público" aunque no puedan agregarlos (o más bien, pueden "agregarlos", pero no "seguirán agregándose").
Entonces, en "SQL Server Management Studio", ingresé a la base de datos de mi aplicación, en otras palabras (mis nombres localizados están ocultos dentro de <> corchetes): "(SQL Server - sa)" / Bases de datos // Security / Roles / Database Roles / public "Haga clic con el botón derecho en" public "y seleccione" Properties ". En el cuadro de diálogo" Database Role Properties - public ", seleccione la página" Securables ". Pase por la lista y para cada elemento de la lista, proponga una instrucción SQL "Grant" para otorgar exactamente ese permiso a otra función. Entonces, por ejemplo, hay una función escalar "[dbo]. [fn_diagramobjects]" en la cual la función "pública" tiene el privilegio "Execute". agregué la siguiente línea:
EXEC ( ''GRANT EXECUTE ON [dbo].[fn_diagramobjects] TO ['' + @RoleName + ''];'' )
Una vez que hice esto para todos los elementos en la lista "Securables", lo envolví en un ciclo while en un cursor seleccionando a través de todos los roles en mi tabla de roles. Esto explícitamente otorgó todos los permisos del rol "público" a mis funciones de base de datos. En ese momento, todos mis usuarios estaban trabajando de nuevo (incluso después de haber eliminado su acceso a "sysadmin", hecho como una medida temporal mientras descubría lo que sucedía).
Estoy seguro de que hay una forma mejor (más elegante) de hacer esto haciendo una especie de consulta sobre los objetos de la base de datos y seleccionando el rol público, pero después de aproximadamente media hora de investigación, no me estaba imaginando, así que lo hice con el método de la fuerza bruta. En caso de que ayude a alguien más, aquí está mi código.
CREATE PROCEDURE [dbo].[GrantAccess]
AS
DECLARE @AppRoleName AS sysname
DECLARE AppRoleCursor CURSOR LOCAL SCROLL_LOCKS FOR
SELECT AppRoleName FROM [dbo].[RoleList];
OPEN AppRoleCursor
FETCH NEXT FROM AppRoleCursor INTO @AppRoleName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ( ''GRANT EXECUTE ON [dbo].[fn_diagramobjects] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT EXECUTE ON [dbo].[sp_alterdiagram] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT EXECUTE ON [dbo].[sp_creatediagram] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT EXECUTE ON [dbo].[sp_dropdiagram] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT EXECUTE ON [dbo].[sp_helpdiagramdefinition] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT EXECUTE ON [dbo].[sp_helpdiagrams] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT EXECUTE ON [dbo].[sp_renamediagram] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[all_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[all_objects] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[all_parameters] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[all_sql_modules] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[all_views] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[allocation_units] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[assemblies] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[assembly_files] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[assembly_modules] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[assembly_references] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[assembly_types] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[asymmetric_keys] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[certificates] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[change_tracking_tables] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[check_constraints] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[column_type_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[column_xml_schema_collection_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[computed_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[conversation_endpoints] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[conversation_groups] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[conversation_priorities] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[crypt_properties] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[data_spaces] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_audit_specification_details] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_audit_specifications] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_files] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_permissions] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_principal_aliases] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_principals] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[database_role_members] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[default_constraints] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[destination_data_spaces] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[event_notifications] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[events] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[extended_procedures] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[extended_properties] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[filegroups] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[foreign_key_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[foreign_keys] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_catalogs] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_index_catalog_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_index_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_index_fragments] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_indexes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_stoplists] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[fulltext_stopwords] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[function_order_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[identity_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[index_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[indexes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[internal_tables] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[key_constraints] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[key_encryptions] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[message_type_xml_schema_collection_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[module_assembly_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[numbered_procedure_parameters] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[numbered_procedures] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[objects] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[parameter_type_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[parameter_xml_schema_collection_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[parameters] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[partition_functions] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[partition_parameters] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[partition_range_values] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[partition_schemes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[partitions] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[plan_guides] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[procedures] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[remote_service_bindings] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[routes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[schemas] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[service_contract_message_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[service_contract_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[service_contracts] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[service_message_types] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[service_queue_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[service_queues] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[services] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[spatial_index_tessellations] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[spatial_indexes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sql_dependencies] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sql_modules] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[stats] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[stats_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[symmetric_keys] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[synonyms] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[syscolumns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[syscomments] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysconstraints] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysdepends] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysfilegroups] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysfiles] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysforeignkeys] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysfulltextcatalogs] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysindexes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysindexkeys] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysmembers] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysobjects] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[syspermissions] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysprotects] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysreferences] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[system_columns] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[system_objects] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[system_parameters] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[system_sql_modules] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[system_views] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[systypes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[sysusers] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[table_types] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[tables] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[transmission_queue] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[trigger_events] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[triggers] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[type_assembly_usages] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[types] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[views] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_indexes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_attributes] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_collections] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_component_placements] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_components] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_elements] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_facets] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_model_groups] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_namespaces] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_types] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_wildcard_namespaces] TO ['' + @AppRoleName + ''];'' )
EXEC ( ''GRANT SELECT ON [sys].[xml_schema_wildcards] TO ['' + @AppRoleName + ''];'' )
FETCH NEXT FROM AppRoleCursor INTO @AppRoleName
END
CLOSE AppRoleCursor
RETURN 0
GO
Una vez que está en el sistema, solo necesitaba "Exec GrantAccess" para que funcione. (Por supuesto, tengo una tabla [RoleList] que contiene un campo "AppRoleName" que contiene los nombres de las funciones de la base de datos.
Entonces, el misterio sigue siendo: ¿por qué todos mis usuarios perdieron su rol "público" y por qué no podría devolvérselos? ¿Esto era parte de una actualización de SQL Server 2008 R2? ¿Fue porque ejecuté otro script para eliminar a cada usuario y volver a agregarlo para actualizar su conexión con el dominio? Bueno, esto resuelve el problema por ahora.
Una última advertencia: probablemente deba verificar el rol "público" en su sistema antes de ejecutar esto para asegurarse de que no falte algo o esté mal, aquí. Siempre es posible que algo sea diferente en tu sistema.
Espero que esto ayude a alguien más.
Tuve el mismo error y SOLUCIONADO al eliminar los roles de db_denydatawriter
datos db_denydatawriter
y db_denydatreader
del usuario de db_denydatreader
de datos. Para eso, seleccione el usuario de base de datos apropiado en inicios de sesión >> propiedades >> asignaciones de usuarios >> encuentre la base de datos y selecciónela >> desmarque las funciones de usuario de Db mencionadas. Eso es !!