-
Interactuar de forma correcta con SQL Server
Tanto si vamos a empezar a trastear con Microsoft SQLServer como si lo vamos a usar de forma seria, deberemos saber que hay unos pasos aconsejados para interactuar con el motor de base de datos. El protocolo sería el siguiente:
1 – Creamos nuestro propio usuario admin, ejecutando:
use master; create login DBAdmin1 with password = 'Pass1234'; create user DBAdmin1 for login DBAdmin1;
…donde Pass1234 puede ser la contraseña que queramos.
2 – Concedemos permisos de control del servidor al usuario que acabamos de crear, ejecutando:
use master; grant control server to DBAdmin1 with grant option;
3 – Creamos la base de datos con la que queremos empezar a trabajar, ejecutando:
create database NombreDeLaBaseDeDatos;
4 – Creamos las tablas e insertamos todos los datos en la base de datos siguiendo este ejemplo básico:
use NombreDeLaBaseDeDatos; create table NombreDeLaTabla (columna1 varchar, columna2 varchar); insert into NombreDeLaTabla values ('a','b');
5 – Comprobamos que los datos se hayan agregado haciendo un simple select, con:
use NombreDeLaBaseDeDatos; select * from NombreDeLaTabla;
6 – Creamos los roles para asignarles a los usuarios que van a interactuar con la base de datos, con:
use NombreDeLaBaseDeDatos; create role diseñadores; create role operadores; create role consultores;
7 – Asignamos permisos DDL, DML y DQL a esos roles, ejecutando:
use NombreDeLaBaseDeDatos; grant control on database::NombreDeLaBaseDeDatos to diseñadores; grant insert, update, delete on database::NombreDeLaBaseDeDatos to operadores; grant select on database::NombreDeLaBaseDeDatos to consultores;
Como vemos, la forma correcta de asignar permisos DDL es con el grant «control». La forma clásica en el que lo hacemos en otro software, por ejemplo:
grant create, alter, drop ...;
…no nos serviría, puesto que DROP, en SQLServer no es un permiso «grantable».
8 – Creamos los usuarios a los que luego asignaremos los roles, ejecutando:
use NombreDeLaBaseDeDatos; create login diseñador1 with password = 'Contra123'; create user diseñador1 for login diseñador1; create login operador1 with password = 'Contra456'; create user operador1 for login operador1; create login consultor1 with password = 'Contra789'; create user consultor1 for login consultor1;
9 – Asignamos los correspondientes roles a cada usuario, con:
use NombreDeLaBaseDeDatos; exec sp_addrolemember diseñadores, diseñador1; exec sp_addrolemember operadores, operador1; exec sp_addrolemember consultores, consultor1;
Si en algún futuro queremos agregar un usuario directamente a un rol, podemos ejecutar:
alter role NombreDelRole add member NombreDeUsuario;
Si queremos asignar permisos específicos sobre algunas tablas, por ejemplo la tabla Proveedores y la tabla Productos, ejecutaríamos:
grant insert, update, delete, select on dbo.Proveedores to NombreDeUsuarioORol; grant insert, update, delete, select on dbo.Productos to NombreDeUsuarioORol;
Si quisiéramos asignar permisos específicos sobre algunas columnas, ejecutaríamos:
grant select on dbo.Tabla(Columna1, Columna2) to NombreDeUsuarioORol;
Podríamos comprobar si a ese usuario se le ha asignado correctamente ese grant ejecutando un comando en su nombre. Imaginemos que el usuario se llama Pedro. Podríamos hacer entonces:
execute as user = 'Pedro'; select * from dbo.Tabla;
Y veremos que nos saldrá un mensaje denegando el acceso a todas las otras columnas que no sean las dos a las que tenemos acceso. Para poder hacer la consulta correcta, deberemos ejecutar:
execute as user = 'Pedro'; select Columna1, Columna2 from dbo.Tabla;
Search
Archives
- diciembre 2024
- noviembre 2024
- octubre 2024
- septiembre 2024
- junio 2024
- mayo 2024
- abril 2024
- marzo 2024
- octubre 2023
- agosto 2023
- junio 2023
- mayo 2023
- abril 2023
- marzo 2023
- febrero 2023
- enero 2023
- diciembre 2022
- noviembre 2022
- octubre 2022
- septiembre 2022
- agosto 2022
- julio 2022
- junio 2022
- mayo 2022
- abril 2022
- febrero 2022
- enero 2022
- diciembre 2021
- noviembre 2021
- octubre 2021
- septiembre 2021
- julio 2021
- junio 2021
- mayo 2021
- abril 2021
- marzo 2021
- febrero 2021
- enero 2021
- diciembre 2020
- noviembre 2020
- octubre 2020
- septiembre 2020
- junio 2020
- mayo 2020
- abril 2020
- marzo 2020
- noviembre 2019
- septiembre 2019
- agosto 2019
- julio 2019
- junio 2019
- mayo 2019
- enero 2019
- noviembre 2018
- septiembre 2018
- agosto 2018
- junio 2018
- mayo 2018
- marzo 2018
- febrero 2018
- diciembre 2017
- octubre 2017
- septiembre 2017
- agosto 2017
- julio 2017
- junio 2017
- mayo 2017
- abril 2017
- marzo 2017
- febrero 2017
- diciembre 2016
- noviembre 2016
- octubre 2016
- septiembre 2016
- agosto 2016
- julio 2016
- mayo 2016
- abril 2016
- marzo 2016
- febrero 2016
- noviembre 2015
- octubre 2015
- agosto 2015
- julio 2015
- junio 2015
- mayo 2015
- abril 2015
- marzo 2015
- febrero 2015
- enero 2015
- diciembre 2014
- noviembre 2014
- octubre 2014
- septiembre 2014
- agosto 2014
- julio 2014
- junio 2014
- mayo 2014
- abril 2014
- marzo 2014
- febrero 2014
- enero 2014
- diciembre 2013
- noviembre 2013
- septiembre 2013
- julio 2013
- mayo 2013
- marzo 2013
- febrero 2013
- enero 2013
- diciembre 2012
- noviembre 2012
- agosto 2012
- julio 2012
- junio 2012
- mayo 2012
- abril 2012
- marzo 2012
- enero 2012
- noviembre 2011
- julio 2011
- junio 2011
- mayo 2011
- abril 2011
- marzo 2011
- enero 2011
- diciembre 2010
- septiembre 2010
- agosto 2010
- julio 2010
- febrero 2010
- enero 2010