Ejercicio: Control de quién puede acceder a la base de datos
Aunque es posible que pueda conectarse a la base de datos a través de la red, eso no significa que realmente pueda obtener acceso a los datos. Siguiendo un enfoque por capas, quiere garantizar que solo obtienen acceso a los datos los usuarios que lo necesitan. En este acceso es donde la autenticación y la autorización entran en juego.
Autenticación
La autenticación es el proceso de comprobación de una identidad. Esta identidad puede ser un usuario, un servicio que se ejecuta en un sistema o un sistema (por ejemplo, una máquina virtual). A través del proceso de autenticación, se asegura de que la persona o el sistema es quien dice ser. SQL Database admite dos tipos de autenticación: Autenticación de SQL y autenticación de Microsoft Entra.
Autenticación de SQL
El método de autenticación de SQL utiliza un nombre de usuario y una contraseña. Las cuentas de usuario se pueden crear en la base de datos principal y se les pueden conceder permisos en todas las bases de datos del servidor. También puede crear usuarios en la propia base de datos, denominados usuarios contenidos, y concederles acceso solo a esa base de datos. Al crear el servidor lógico de la base de datos, especificó un inicio de sesión de administrador de servidor con un nombre de usuario y una contraseña. Con estas credenciales, puede autenticarse en cualquier base de datos en ese servidor como propietario de la base de datos, o dbo.
Autenticación de Microsoft Entra
Este método de autenticación usa las identidades administradas por Microsoft Entra ID y es compatible con dominios administrados e integrados. Use la autenticación de Microsoft Entra (seguridad integrada) siempre que sea posible. Con la autenticación de Microsoft Entra puede administrar centralmente las identidades de los usuarios de la base de datos y otros servicios de Microsoft en una ubicación central. La administración de identificadores central ofrece una ubicación única para administrar usuarios de base de datos y simplifica la administración de permisos. Si desea usar la autenticación de Microsoft Entra, debe crear otro administrador de servidor llamado administrador de Microsoft Entra, que puede administrar usuarios y grupos de Microsoft Entra. Este administrador también puede realizar todas las operaciones de un administrador de servidor normal.
Autorización
La autorización se refiere a lo que un usuario puede hacer en una Azure SQL Database. Esta autorización se controla mediante los permisos concedidos directamente a la cuenta de usuario o a las pertenencias a roles de base de datos. Un rol de base de datos se usa para agrupar permisos a fin de facilitar la administración. Agregue un usuario a un rol para conceder los permisos que tiene el rol. Estos permisos pueden incluir la capacidad de iniciar sesión en la base de datos, la capacidad de leer una tabla y la capacidad de agregar y quitar columnas de una base de datos. Como procedimiento recomendado, debe conceder a los usuarios los privilegios mínimos necesarios. El proceso de concesión de autorización a los usuarios de SQL y de Microsoft Entra es el mismo.
En el ejemplo, la cuenta de administrador de servidor con la que se conecta forma parte del rol db_owner, que tiene autoridad para realizar cualquier acción en la base de datos.
Autenticación y autorización puestas en práctica
Como procedimiento recomendado, su aplicación debe usar una cuenta dedicada para autenticarse. De esta manera, puede limitar los permisos concedidos a la aplicación y reducir los riesgos de actividad malintencionada en caso de que el código de aplicación sea vulnerable a ataques de inyección SQL. Se recomienda crear un usuario de base de datos independiente, ya que esto permitirá que la aplicación se autentique directamente en la base de datos. Para obtener más información, vea Usuarios de base de datos independiente - Conversión de la base de datos en portátil.
Use la autenticación de Microsoft Entra para administrar identidades de usuarios de base de datos de forma centralizada y como alternativa a la autenticación de SQL Server.
Eche un vistazo a cómo configurar un usuario y concederle acceso a una base de datos. En este caso, va a usar la autenticación de SQL para el usuario, pero el proceso sería esencialmente el mismo si se utilizase la autenticación de Microsoft Entra.
Creación de un usuario de base de datos
Cree un nuevo usuario que pueda usar para concederle acceso.
En Cloud Shell, en la máquina virtual de appServer, conéctese otra vez a la base de datos como
ADMINUSER
.sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
Ejecute el comando siguiente para crear un usuario. Este usuario es un usuario contenido al que solo se le ha permitido el acceso a la base de datos marketplace. No dude en ajustar la contraseña según sea necesario, pero no olvide apuntarla porque la necesitará para un paso posterior.
CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1'; GO
Con estas credenciales, el usuario puede autenticarse en la base de datos, pero no está autorizado para acceder a los datos. Conceda acceso a este usuario.
Concesión de permisos a un usuario
Haga al usuario miembro de los roles db_datareader
y db_datawriter
, lo que le concederá acceso para leer y escribir en la base de datos, respectivamente. También quiere evitar que este usuario obtenga acceso a una tabla con las direcciones.
Mientras sigue conectado a
sqlcmd
en appServer, ejecute el siguiente comando T-SQL para conceder los rolesdb_datareader
ydb_datawriter
al usuario que ha creado.ALTER ROLE db_datareader ADD MEMBER ApplicationUser; ALTER ROLE db_datawriter ADD MEMBER ApplicationUser; GO
Puede limitar el ámbito de acceso aún más. Podría denegar el acceso de un usuario a otros elementos de la base de datos mediante el operador DENY. Ejecute el siguiente comando T-SQL para denegar al usuario ApplicationUser la capacidad de seleccionar datos de la tabla
SalesLT.Address
.DENY SELECT ON SalesLT.Address TO ApplicationUser; GO
Ahora inicie sesión como ese usuario y eche un vistazo a esta configuración en acción.
Sin salir del símbolo del sistema de T-SQL, escriba
exit
para salir de la sesión.Vuelva a iniciar sesión en la base de datos, pero como el usuario que ha creado.
sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
Ejecute la siguiente consulta. Esta consulta extrae datos de una tabla a la que el usuario está autorizado para obtener acceso.
SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer; GO
Obtendrá una lista de los clientes.
FirstName LastName EmailAddress Phone -------------- -------------- ------------------------------- ------------ Orlando Gee orlando0@adventure-works.com 245-555-0173 Keith Harris keith0@adventure-works.com 170-555-0127 Donna Carreras donna0@adventure-works.com 279-555-0130 Janet Gates janet1@adventure-works.com 710-555-0173 ...
Vea lo que sucede cuando se intenta consultar una tabla a la que no se tiene acceso.
SELECT * FROM SalesLT.Address; GO
Obtendrá un mensaje que indica que no tiene acceso a esta tabla.
Msg 229, Level 14, State 5, Server server-22942, Line 1 The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
Como puede ver aquí, aunque se ha concedido acceso de lectura y escritura a la base de datos, puede proteger aun más el acceso a los datos al denegar explícitamente el acceso a tablas. Si tiene varios usuarios que comparten un acceso similar, puede crear roles personalizados con los permisos adecuados y simplificar la administración.
Es importante proteger correctamente la base de datos y otorgar acceso solo cuando sea necesario. Azure SQL Database proporciona la capacidad integrada de controlar totalmente la capacidad de autenticar y autorizar las identidades para acceder a los datos de la base de datos.