28/9/17

SqlServer. Asociar usuarios de Directorio Activo a Base de Datos.

Hay que estar en la Base de Datos:

use DatabaseName;
Luego hay que crear el usuario para la base de datos:
create user [dominio\usuarioOGrupo];

Se me hace extraña la notación entre corchetes pero es así. Hay que poner el corchete, dominio, barra invertida, usuario o grupo AD y corchete.

Una vez que el usuario ya lo tiene en cuenta SqlServer, hay que decirle para qué lo vamos a usar. Se pueden dar todo tipo de permisos por tabla y/o columna pero lo típico será asignarlo a uno de los roles que tenga la Base de datos.

alter role [db_datareader,db_datawriter,...] add member [dominio\usuarioOGrupo];

En este caso los primeros corchetes no se ponen, son para definir que hay que elegir alguno de los roles. Por ejemplo:

alter role db_datawriter add member [empresa\vendedores];

Esto daría permiso de escritura en la Base de Datos activa a los pertenecientes al grupo vendedores en nuestro dominio (empresa)

Con esto, los pertenecientes a un grupo de Directorio Activo podrán, por ejemplo, escribir en una base de datos. Una vez que a ese usuario de dominio se le quita del grupo, ya no podrá hacerlo.

21/9/17

Operaciones con campos Identity (SqlServer)

Muchas de las tablas que uso tienen campos autonuméricos, llamados Identity, en SqlServer.

Si necesitamos introducir un número específico en esos campos, por ejemplo, porque estemos copiando una tabla de otra base de datos, o queramos tener unos valores específicos en algunos registros, tenemos que parar esa inserción antes de hacerlo.
Para ello usamos el comando:
set identity_insert [tabla] off;
set identity_insert [tabla] on; // Para dejarlo como estaba
Es importante tener en cuenta que SqlServer solo permite parar una inserción a la vez por Base de Datos. No podríamos tener dos tablas con la inserción parada. Habría que parar una, hacer las operaciones correspondientes, dejarla con la inserción activa de nuevo, y entonces parar la siguiente.
Tras esto, para fijar el valor en el que queramos que siga la inserción (normalmente igual al mayor número insertado hasta ahora) habría que ejecutar el comando:
DBCC CHECKIDENT ('[tabla]', RESEED,[numeroapartirdelcualsumar1]);