Acerca de los usuarios de SQL Server

En esta página se describe cómo funciona Cloud SQL con los usuarios y los roles de SQL Server. Los roles de SQL Server te permiten controlar el acceso y las funciones de los usuarios que acceden a una instancia de SQL Server.

Para obtener información sobre cómo crear y gestionar usuarios de Cloud SQL, consulta el artículo Crear y gestionar usuarios.

Roles y usuarios de SQL Server

Los roles de SQL Server pueden ser un solo rol o funcionar como un grupo de roles.

Un usuario es un rol que puede iniciar sesión (el rol tiene el permiso LOGIN ). Todos los roles creados por Cloud SQL tienen el permiso LOGIN, por lo que Cloud SQL usa los términos "rol" y "usuario" indistintamente. Sin embargo, si creas un rol con cualquier herramienta de cliente compatible con SQL Server, no es necesario que el rol reciba el permiso LOGIN.

Cloud SQL para SQL Server restringe el acceso a determinados roles de servidor que proporcionan privilegios avanzados. Algunos ejemplos de estos roles son DbRootRole, serveradmin, securityadmin, setupadmin, diskadmin y dbcreator.

Todos los usuarios de SQL Server deben tener una contraseña. Por lo tanto, no puedes iniciar sesión con un usuario que no tenga contraseña.

Superusuarios y procedimientos almacenados del sistema

Cloud SQL para SQL Server es un servicio gestionado, por lo que restringe el acceso a ciertos procedimientos almacenados y tablas del sistema que requieren privilegios avanzados. En Cloud SQL, no puedes crear ni acceder a usuarios con permisos de superusuario.

Usuarios predeterminados de SQL Server

Cuando creas una instancia de Cloud SQL para SQL Server, se crea automáticamente el sqlserverusuario predeterminado, aunque debes definir su contraseña.

El usuario sqlserver forma parte del rol CustomerDbRootRole y sus permisos (privilegios) incluyen lo siguiente:

  • ALTER ANY CONNECTION
  • ALTER ANY LOGIN
  • ALTER ANY SERVER ROLE
  • ALTER SERVER STATE
  • ALTER TRACE
  • CONNECT SQL
  • CREATE ANY DATABASE
  • CREATE SERVER ROLE
  • VIEW ANY DATABASE
  • VIEW ANY DEFINITION
  • VIEW SERVER STATE

También puedes añadir cloudsql enable linked servers a tu instancia si quieres usarla con servidores vinculados. Este indicador concede a tu servidor los siguientes permisos:

  • ALTER ANY LINKED SERVER

Conceder permisos de servidor

Cuando concedas privilegios con cualquier GRANT comando, debes transferir CustomerDbRootRole como, por ejemplo, el valor de grantor_principal.

El siguiente ejemplo de GRANT ALTER ANY LOGIN es válido:

GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole

El siguiente ejemplo de GRANT ALTER ANY LOGIN no es válido:

GRANT ALTER ANY LOGIN TO [Account]

Otros usuarios de SQL Server

Puedes crear otros usuarios de SQL Server o roles. Todos los usuarios que crees con Cloud SQL tendrán los mismos permisos de base de datos que el inicio de sesión sqlserver. Sin embargo, si utilizas otro proceso para crear un usuario (en lugar de crearlo con Cloud SQL), el usuario no tendrá los mismos permisos que las cuentas de administrador de cliente o el usuario sqlserver. Por ejemplo, si usas el proceso create login y añades el inicio de sesión al rol de servidor CustomerDbRootRole, el usuario no tendrá los mismos permisos que las cuentas de administrador del cliente o el usuario sqlserver. Por lo tanto, puedes usar Cloud SQL para crear un usuario si quieres que tenga los mismos permisos de base de datos que el inicio de sesión sqlserver. Para validar la diferencia de permisos entre dos cuentas, puede usar la siguiente función: sys.fn_my_permissions.

Importaciones de bases de datos: permisos de propietario

Cuando importa una base de datos, el tratamiento del propietario varía de la siguiente manera, en función del tipo de propietario:

  • Si ya existe un inicio de sesión que no es sa: Cloud SQL conserva ese propietario y crea un usuario llamado sqlserver que se asigna al inicio de sesión sqlserver. Cloud SQL concede los permisos CONTROL y ALTER ANY USER a ese usuario sqlserver.
  • En el caso de los inicios de sesión desconocidos o creados por el sistema, Cloud SQL transfiere la propiedad de la base de datos al inicio de sesión sqlserver.

Cambiar los permisos de los usuarios

El comando ALTER ROLE se puede usar para cambiar los permisos de los usuarios. Si crea un usuario con un cliente, puede asociarlo a otro rol o proporcionarle permisos diferentes.

Solución de problemas

Error al acceder a la base de datos

Al intentar acceder a una base de datos que has creado como usuario, aparece el siguiente error:

The server principal USERNAME is not able to access the
database DATABASE_NAME under the current security context.

El problema puede deberse a lo siguiente:

El usuario no es miembro de la base de datos.

Cosas que puedes probar

Conéctate a la base de datos como usuario sqlserver y añade el nuevo usuario. A continuación, asigna al nuevo usuario el rol db_owner de la base de datos. Por ejemplo:

EXEC sp_adduser 'user';
EXEC sp_addrolemember 'db_owner', 'user'

Siguientes pasos