Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
SQL Server usa identificadores de seguridad (SID) por servicio (también conocidos como "entidad de seguridad de servicio" [SID]) para permitir la concesión de los permisos directamente a un servicio específico. Este método lo usa SQL Server para conceder permisos a los servicios de motor y agente (NT SERVICE\MSSQL$<InstanceName> and NT SERVICE\SQLAGENT$<InstanceName>, respectivamente). Con este método, estos servicios pueden acceder al motor de base de datos solo cuando se ejecutan los servicios. Para obtener más información, vea KB2620201 (vínculo archivado).
Este mismo método se puede usar cuando se conceden permisos a otros servicios. El uso de un SID de servicio elimina la sobrecarga de administrar y mantener las cuentas de servicio y proporciona un control más granular y más preciso sobre los permisos concedidos a los recursos del sistema.
Ejemplos de servicios donde se puede usar un SID de servicio:
Algunos servicios no disponen de un SID de servicio de forma predeterminada. El SID de servicio debe crearse con SC.exe. Este método lo han adoptado los administradores de Microsoft System Center Operations Manager a fin de conceder permiso para el Servicio de mantenimiento en SQL Server.
Una vez se haya creado y confirmado el servicio de SID, se debe conceder permiso en SQL Server. La concesión de permisos se lleva a cabo mediante la creación de un inicio de sesión en Windows con SQL Server Management Studio (SSMS) o una consulta. Una vez creado el inicio de sesión, se le pueden conceder permisos, agregar a roles y asignar a bases de datos al igual que cualquier otro inicio de sesión.
Sugerencia
Si se recibe el error Login failed for user 'NT AUTHORITY\SYSTEM'
, compruebe que existe el SID de servicio para el servicio deseado, que el inicio de sesión de SID de servicio se ha creado en SQL Server y que se han concedido los permisos adecuados para el SID de servicio en SQL Server.
Tradicionalmente, las cuentas de servicio se han usado para permitir que los servicios inicien sesión en SQL Server. Las cuentas de servicio agregan una capa adicional de complejidad de administración ya que tienen que mantener y actualizar con frecuencia la contraseña de la cuenta de servicio. Además, las credenciales de la cuenta de servicio las podría usar una persona que intentara ocultar sus actividades cuando realizara acciones en la instancia.
Las cuentas del sistema históricamente han concedido permisos mediante la creación de un inicio de sesión para las cuentas LocalSystem (NT AUTHORITY\SYSTEM en en-us) o NetworkService ( NT AUTHORITY\NETWORK SERVICE en en-us) y la concesión de esos permisos de los inicios de sesión. Este método concede cualquier permiso de proceso o servicio en SQL, que se ejecuta como una cuenta del sistema.
El uso de un SID de servicio permite que los permisos se concedan a un servicio específico. El servicio solo tiene acceso a los recursos cuyos permisos se le han concedido cuando se está ejecutando. Por ejemplo, si la HealthService
se está ejecutando como LocalSystem
y se le concede View Server State
, la cuenta LocalSystem
solo tendrá permiso para View Server State
cuando se esté ejecutando en el contexto de la HealthService
. Si cualquier otro proceso intenta acceder al estado del servidor de SQL como LocalSystem
, se le denegará el acceso.
El siguiente comando de PowerShell creará un SID de servicio en el servicio de mantenimiento de System Center Operations Manager.
sc.exe --% sidtype "HealthService" unrestricted
Importante
--%
indica a PowerShell detener el análisis del resto del comando. Esto es útil cuando se usan comandos y aplicaciones heredados.
Para comprobar un SID de servicio o para garantizar que un SID de servicio existe, ejecute el siguiente comando en PowerShell.
sc.exe --% qsidtype "HealthService"
Importante
--%
indica a PowerShell detener el análisis del resto del comando. Esto es útil cuando se usan comandos y aplicaciones heredados.
El ejemplo siguiente crea un inicio de sesión para el servicio de mantenimiento de System Center Operations Manager con T-SQL.
CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO
El ejemplo siguiente crea un inicio de sesión para el servicio de clúster con T-SQL. La concesión directa de permisos al servicio de clúster elimina la necesidad de conceder permisos excesivos para la cuenta del SISTEMA.
CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO
Conceda los permisos necesarios con el fin de administrar grupos de disponibilidad para el servicio de clúster.
GRANT ALTER ANY AVAILABILITY GROUP TO [NT SERVICE\ClusSvc]
GO
GRANT CONNECT SQL TO [NT SERVICE\ClusSvc]
GO
GRANT VIEW SERVER STATE TO [NT SERVICE\ClusSvc]
GO
Nota
Si se quitan los inicios de sesión de SID de servicio o se quitan del rol de servidor sysadmin, pueden producirse problemas en varios componentes de SQL Server que se conectan al Motor de base de datos SQL Server. Entre los problemas se incluyen los siguientes:
En el caso de una instancia predeterminada de SQL Server, puede corregir esta situación agregando el SID del servicio mediante los siguientes comandos de Transact-SQL:
CREATE LOGIN [NT SERVICE\MSSQLSERVER] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQLSERVER]
CREATE LOGIN [NT SERVICE\SQLSERVERAGENT] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLSERVERAGENT]
Para una instancia con nombre de SQL Server, utilice los siguientes comandos de Transact-SQL:
CREATE LOGIN [NT SERVICE\MSSQL$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQL$SQL2019]
CREATE LOGIN [NT SERVICE\SQLAgent$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLAgent$SQL2019]
En este ejemplo, SQL2019
es el nombre de instancia de SQL Server.
Para obtener más información sobre la estructura de SID de servicio, consulte Estructura de SERVICE_SID_INFO.
Obtenga información sobre las opciones adicionales que están disponibles cuando se crea un inicio de sesión.
Para usar seguridad basada en roles con los SID de servicio, obtenga información sobre crear roles en SQL Server.
Obtenga información sobre diferentes formas de conceder permisos a SID de servicio en SQL Server.
Para más información sobre la configuración de cuentas de servicio para SQL Server, vea Configuración de permisos y cuentas de servicio de Windows.
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyCursos
Ruta de aprendizaje
Implementación de un entorno seguro para un servicio de base de datos - Training
Implementación de un entorno seguro para un servicio de base de datos
Documentación
Configuración de permisos y cuentas de servicio de Windows - SQL Server
Familiarícese con las cuentas de servicio que se usan para iniciar y ejecutar servicios en SQL Server. Vea cómo configurarlas y asignar los permisos adecuados.
Configurar permisos del sistema de archivos para el acceso al motor de base de datos - SQL Server
Obtenga información sobre los identificadores de seguridad (SID) por servicio. Vea cómo concederles permiso de acceso a la ubicación del archivo de base de datos para que el motor de base de datos pueda acceder a los archivos de base de datos.
Seleccionar una cuenta para el servicio Agente SQL Server - SQL Server Agent
La cuenta de inicio del servicio define la cuenta de Microsoft Windows en la que se ejecuta Agente SQL Server y sus permisos de red.