Sei sulla pagina 1di 32

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

GUIA DE LABORATORIO N 11 Nombre de la practica: Administracin de grupos de archivos, esquemas y usuarios en una base de datos y utilizar la importacin y exportacin de datos (bcp) Lugar de ejecucin: Laboratorio de Informtica Tiempo estimado: 3 horas Materia: Base de datos I

CICLO 01-2012

I. Objetivos Que el estudiante: Cree grupos de archivos y esquemas para separar la informacin de una base de datos Conozca la importancia de los usuarios en una base de datos Implemente la administracin de usuarios dentro de una base de datos. II. Introduccin Terica

Archivos y grupos de archivos fsicos de la base de datos.


SQL Server asigna una base de datos a un conjunto de archivos del sistema operativo. Los datos y la informacin del registro nunca se mezclan en el mismo archivo, y cada archivo slo es utilizado por una base de datos. Los grupos de archivos se denominan colecciones con nombre de archivos que se utilizan como ayuda en tareas de colocacin de datos y administrativas, como las operaciones de copia de seguridad y restauracin. Archivos de base de datos Las bases de datos de SQL Server utilizan tres tipos de archivos: 1. Archivos de datos principales El archivo de datos principal es el punto de partida de la base de datos y apunta a los otros archivos de la base de datos. Cada base de datos tiene un archivo de datos principal. La extensin recomendada para los nombres de archivos de datos principales es .mdf. 2. Archivos de datos secundarios Los archivos de datos secundarios son todos los archivos de datos menos el archivo de datos principal. Puede que algunas bases de datos no tengan archivos de datos secundarios, mientras que otras pueden tener varios archivos de datos secundarios. La extensin de nombre de archivo recomendada para los archivos de datos secundarios es .ndf. 3. Archivos de registro Los archivos de registro almacenan toda la informacin de registro que se utiliza para recuperar la base de datos. Como mnimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios. La extensin de nombre de archivo recomendada para los archivos de registro es .ldf. SQL Server no exige las extensiones de nombre de archivo .mdf, .ndf y .ldf, pero estas extensiones ayudan a identificar las distintas clases de archivos y su uso. 1

En SQL Server, las ubicaciones de todos los archivos de una base de datos se graban tanto en el archivo principal de la base de datos como en la base de datos master. SQL Server Database Engine (Motor de base de datos de SQL Server) utiliza casi siempre la informacin de ubicacin del archivo de la base de datos master. Nombres de archivo lgico y fsico Los archivos de SQL Server tienen dos nombres: logical_file_name logical_file_name es el nombre que se utiliza para hacer referencia al archivo en todas las instrucciones Transact-SQL. El nombre de archivo lgico tiene que cumplir las reglas de los identificadores de SQL Server y tiene que ser nico entre los nombres de archivos lgicos de la base de datos. os_file_name os_file_name es el nombre del archivo fsico que incluye la ruta de acceso al directorio. Debe seguir las reglas para nombres de archivos del sistema operativo. La siguiente ilustracin muestra ejemplos de los nombres de archivo lgico y fsico de una base de datos creada en una instancia predeterminada de SQL Server:

Los archivos de datos y de registro de SQL Server se pueden colocar en sistemas de archivos FAT o NTFS. Grupos de archivos de una base de datos Los objetos y archivos de una base de datos se pueden agrupar en grupos de archivos con fines de asignacin y administracin. Hay dos tipos de grupos de archivos: Principal El grupo de archivos principal contiene el archivo de datos principal y los dems archivos asignados especficamente a otro grupo de archivos. Todas las pginas de las tablas del sistema estn asignadas al grupo de archivos principal. 2

Definidos por el usuario Los grupos de archivos definidos por el usuario son los grupos de archivos especificados mediante la palabra clave FILEGROUP en la instruccin CREATE DATABASE o ALTER DATABASE. Los archivos de registro nunca forman parte de un grupo de archivos. El espacio del registro se administra de forma independiente del espacio de datos. Ningn archivo puede pertenecer a ms de un grupo de archivos. Las tablas, los ndices y los datos de objetos grandes se pueden asociar a un grupo de archivos especfico. En este caso, todas sus pginas se asignarn a dicho grupo de archivos o se pueden crear particiones en las tablas e ndices. Los datos de las tablas e ndices con particiones se dividen en unidades y cada una de ellas se puede colocar en un grupo de archivos independiente de una base de datos. Un grupo de archivos de cada base de datos se designa como grupo de archivos predeterminado. Cuando se crea una tabla o un ndice sin especificar un grupo de archivos, se supone que todas las pginas se asignarn a partir del grupo de archivos predeterminado. Slo un grupo de archivos puede ser el predeterminado en un momento dado. Los miembros de la funcin fija db_owner de la base de datos pueden cambiar el grupo de archivos predeterminado de un grupo a otro. Si no se especifica ningn grupo de archivos predeterminado, se considera como tal al grupo de archivos principal.

Esquemas
El concepto de Esquema, es un cambio importante frente a versiones anteriores de SQL Server, explicndose el cambio producido con los conceptos de Propietario y Esquema entre SQL Server 2000 y SQL Server 2008. Se explica el concepto de esquema por defecto, la utilizacin de GRANT - DENY - REVOKE con la clusula ON SCHEMA, cmo cambiar el propietario de un objeto en SQL Server (sp_changeobjectowner), cmo cambiar el propietario de un esquema (ALTER AUTHORIZATION SCHEMA), ventajas de los esquemas al eliminar usuarios cambiando el esquema bajo es que estn sus objetos (ALTER SCHEMA TRANSFER), etc. Entender correctamente los conceptos de Propietario (object owner) y Esquema (schema), requiere tambin de comprender el concepto de Resolucin de Nombres en SQL Server. Todo objeto de base de datos tiene un nombre, que permite identificarlo de forma nica en la base de datos en la que existe. As, podemos tener una tabla llamada TBL_VENTAS. En la mayora de los casos se crean los objetos con propietario o esquema dbo, por lo que sera posible acceder a sta tabla denominndola TBL_VENTAS dbo.TBL_VENTAS. Pero este comportamiento, Por qu es as? En SQL Server 2000, el nombre completo de un objeto toma la forma de servidor_instancia.base_de_datos.propietario.objeto, mientras que a partir de SQL Server 2005 el nombre completo de un objeto pasa a ser servidor_instancia.base_de_datos.esquema.objeto. Como se puede apreciar, se cambia al Propietario por el Esquema. Pero, qu importancia tiene? Hasta SQL Server 2000 no exista el concepto de Esquema, de tal modo que un usuario al crear un objeto, si no lo calificaba de forma explcita, se crea con el nombre del usuario creador como propietario. Por ejemplo, si el usuario juan crea una tabla con nombre TBL_VENTAS sin calificar su nombre completo en la sentencia CREATE TABLE (o al menos sin calificar el propietario), la tabla se denominar juan.TBL_VENTAS. Esto tiene varias implicaciones: Juan podr acceder a la tabla sin calificar, por ejemplo con SELECT * FROM TBL_VENTAS. El resto de usuarios necesitarn calificar correctamente la tabla para acceder a ella, por ejemplo con SELECT * FROM juan.TBL_VENTAS. En caso contrario obtendrn el siguiente error an cuando existe el objeto al que desean acceder:

Server: Msg 208, Level 16, State 1, Line 1 Invalid object name 'TBL_VENTAS'.

Aqu, ya tenemos un problema potencial de resolucin de nombres. Hay que tener en cuenta, que un usuario pedro, puede tener otra tabla TBL_VENTAS. El nombre sigue siendo nico, es decir, un objeto ser juan.TBL_VENTAS y el otro ser pedro.TBL_VENTAS. Es decir, distintos usuarios (propietarios) pueden tener objetos con el mismo nombre en la misma base de datos. Esto no es un gran problema, pero si no lo tenemos presente, en alguna ocasin nos podremos dar algn pequeo susto, por esta pequea confusin. Sin embargo, esto no acaba aqu, dado que si el usuario juan empieza a crear objetos y el resto de usuarios a utilizarlos, si en un futuro necesitamos eliminar al usuario juan, necesitaremos eliminar todos sus objetos. Es decir, para eliminar un usuario hay que eliminar todos sus objetos, y las consultas que acceden a dichos objetos calificndolos correctamente dejarn de funcionar (salvo que las modifiquemos). Es cierto que podemos evitar eliminar los objetos, si cambiamos su propietario. Es decir, podemos utilizar el procedimiento almacenado del sistema sp_changeobjectowner para cambiar el propietario de los objetos, y as poder eliminar al usuario, pero seguimos con un potencial problema de resolucin de nombres. En ocasiones los objetos se crean por el usuario correspondiente al inicio de sesin propietario de la base de datos (cuyo usuario de base de datos es dbo) o por un inicio de sesin miembro de sysadmin (cuyo usuario de base de datos es tambin dbo), lo cual tiene sus propias implicaciones. Cuando el propietario de la base de datos o un miembro de sysadmin crea un objeto sin calificar de forma explcita en la sentencia CREATE, la propiedad de dicho objeto se asigna a dbo. Este detalle es vital, dada la forma en que funciona la resolucin de nombres hasta SQL Server 2000, pues al intentar acceder a objetos no calificados correctamente, primero se comprueba si existen con propietario el usuario actual, y en caso de que no exista, se comprueba si el usuario existe con propietario dbo. De este modo, al crear objetos con propietario dbo, todos los usuarios podrn acceder a ellos calificndolos correctamente o sin calificarlos correctamente, y habremos evitado nuestro problema, con el precio de dicha limitacin (utilizar como propietario a dbo). Es sta la forma en la que se trabaja en la mayora de los casos: todos los objetos como propiedad de dbo, al margen de quin sea el creador. Una alternativa, no muy recomendada, pero interesante desde un punto de vista didctico, es la posibilidad de poder crear funciones de base de datos (database roles), que son como grupo de usuarios, y utilizar funciones de base de datos (database roles) como propietarios de los objetos. Aunque es bueno quedarse con la opcin de utilizar siempre dbo como propietario. Ahora vamos a hablar de cmo es a partir de SQL Server 2005. Los esquemas (schemas) son objetos de base de datos que facilitan la resolucin de nombres, es decir, los esquemas facilitan un espacio de nombres (namespace). Con esto, ahora podemos eliminar un usuario sin que impacte en las aplicaciones y consultas existentes, puesto que la eliminacin de un usuario (una cuestin de seguridad) no implica la eliminacin del esquema (una cuestin de resolucin de nombres). Es evidente, que todo objeto de base de datos (ej: tabla, vista, procedimiento almacenado, etc.) tiene asociado uno y slo un esquema. Adems, todo usuario tiene asignado un esquema por defecto (default schema), en su defecto, el esquema dbo (si... es cierto... y tenemos que ser capaces de diferenciar entre esquema y usuario claramente, porque nos vamos a encontrar muchas bases de datos que tiene esquemas con los mimos nombres que los usuarios, por ejemplo, como resultado de una migracin de SQL Server 2000 a SQL Server 2008.... y si no estamos atentos, podemos confundirnos, cual humano que somos ;-). De hecho, mltiples usuarios pueden tener asignado el mismo esquema por defecto, si nos resulta de utilidad.

Gestin de usuarios.
Creacin de usuarios SQL Server Login en SQL Server

Concepto de Login y User Login / Inicio de sesin Provee nicamente acceso al servidor. Son los accesos al servidor, lo cual no quiere decir que puedan acceder a las bases de datos que all hay. User / Usuario

Provee acceso a la/s BD, una vez accedido al servidor. Da acceso a la base de datos, pero esto tampoco quiere decir que pueda hacer cualquier operacin sobre la base de datos, en principio no puede hacer casi nada, a menos que se le vaya asignando roles y otros privilegios para darle permisos de acceso a los objetos de esa base de datos. En SQL Server nos encontramos con tres niveles o capas en los cuales podemos gestionar la seguridad. El primero de ellos se encuentra a nivel de servidor, en l podemos gestionar quin tiene acceso al servidor y quin no. El que alguien tenga acceso al servidor no quiere decir que pueda acceder a las bases de datos que se encuentran en l. Para ello hay que tener acceso a la siguiente barrera de seguridad, que es a nivel de base de dato. Para que un login tenga acceso a una base de datos, tenemos que crear en ella un usuario (user). Si un usuario tiene acceso a una base de datos no quiere decir que tenga acceso a todo su contenido, ni a cada uno de los objetos que la componen. Para que esto ocurra tendremos que irle concediendo o denegando permisos sobre cada uno de los objetos que la componen.

Estructura

Creacin de inicios de sesin. Ejemplo Se necesita tener 2 Usuarios de BD y 2 Inicio de sesin para la Base de datos BD_SQLServer Sintaxis: CREATE LOGIN nombre_login 6

WITH PASSWORD = 'clave_usuario';

CREATE LOGIN Director_RH WITH PASSWORD = '12345';

CREATE LOGIN Gerente_Produccion WITH PASSWORD = abcd';

Creacin de Usuarios (User) Para poder tener acceso a las bases de datos primero debemos crear los USUARIOS de BASES DE DATOS. Para la creacin de usuarios de las bases de datos nos ayudaremos del siguiente cdigo. Sintaxis: USE BASE_DE_DATOS; CREATE USER nombre_usuario FOR LOGIN nombre_login WITH DEFAULT_SCHEMA = algun_esquema;

USE BD_SQLServer CREATE USER JuanPerez FOR LOGIN Director_RH WITH DEFAULT_SCHEMA = RecursosHumanos

CREATE USER MarioCastro FOR LOGIN Gerente_Produccion WITH DEFAULT_SCHEMA = Produccion

Asignando permisos sobre esquemas Vamos a asignarle un esquema al usuario, por ejemplo el esquema RecursosHumanos. GRANT SELECT ON SCHEMA :: RecursosHumanos TO JuanPerez

WITH GRANT OPTION GO

Como se puede apreciar el usuario efectivamente puede realizar un SELECT, pero no podr el usuario realizar un DELETE o un INSERT o un UPDATE ya que solamente hemos asignado el permiso SELECT al usuario de la BD.

Asignar permisos tabla por tabla GRANT SELECT ON OBJECT::RecursosHumanos.Departamento TO JuanPerez

Transferir esquemas entre usuarios ALTER AUTHORIZATION ON SCHEMA::[Ventas] TO [MarioCastro]

Eliminar inicios de sesin y usuarios de BD Para poder remover efectivamente un usuario de la base de datos debemos de tener presente las siguientes consideraciones: 1. Eliminar los permisos sobre esquemas del usuario. 2. Eliminar los permisos sobre tablas del usuario. 3. Finalmente Eliminar el usuario de la Base de Datos.

Sentencia para eliminar un permiso sobre esquema REVOKE SELECT ON SCHEMA :: inventario TO juanlopez CASCADE GO Sentencia para eliminar un permiso sobre una tabla USE rentavideo; REVOKE SELECT ON OBJECT::inventario.peliculas TO juanlopez;

GO

Finalmente cuando el usuario no posee permisos sobre esquemas o sobre tablas procedemos a eliminarlo de la Base de Datos. Sentencia para eliminar al usuario juanlopez

--BORRAR UN USUARIO DROP USER juanlopez

Eliminar un inicio de sesin Para remover un inicio de sesin debemos de asegurarnos de realizar la eliminacin del usuario de la base de datos que estn registrados bajo el inicio de sesin correspondiente. Un usuario de Base de Datos y un Inicio de Sesin poseen relacin de 1 a 1, con esto quiero decir que a un usuario corresponde un inicio de sesin. DROP LOGIN Director_RH

Funciones de nivel de servidor Para administrar con facilidad los permisos en el servidor, SQL Server proporciona varias funciones, que son las entidades de seguridad que agrupan a otras entidades de seguridad. Las funciones son como los grupos del sistema operativo Microsoft Windows. Las funciones de nivel de servidor tambin se denominan funciones fijas de servidor porque no se pueden crear nuevas funciones de nivel de servidor. Las funciones de nivel de servidor se aplican a todo el servidor en lo que respecta a su mbito de permisos. Puede agregar inicios de sesin de SQL Server, cuentas de Windows y grupos de Windows a las funciones de nivel de servidor. Cada miembro de una funcin fija de servidor puede agregar otros inicios de sesin a esa misma funcin. En la tabla siguiente se muestran las funciones de nivel de servidor y sus capacidades. Nombre de la funcin de nivel de servidor Descripcin sysadmin serveradmin Los miembros de la funcin fija de servidor sysadmin pueden realizar cualquier actividad en el servidor. Los miembros de la funcin fija de servidor serveradmin pueden cambiar las opciones de configuracin en el servidor y cerrar el servidor.

securityadmin

Los miembros de la funcin fija de servidor securityadmin administran los inicios de sesin y sus propiedades. Administran los permisos de servidor GRANT, DENY y REVOKE. Tambin administran los permisos de base de datos GRANT, DENY y REVOKE. Asimismo, pueden restablecer las contraseas para los inicios de sesin de SQL Server. Los miembros de la funcin fija de servidor processadmin pueden finalizar los procesos que se ejecutan en una instancia de SQL Server. Los miembros de la funcin fija de servidor setupadmin pueden agregar y quitar los servidores vinculados. Los miembros de la funcin fija de servidor bulkadmin pueden ejecutar la instruccin BULK INSERT. La funcin fija de servidor diskadmin se utiliza para administrar archivos de disco. Los miembros de la funcin fija de servidor dbcreator pueden crear, modificar, quitar y restaurar cualquier base de datos. Cada inicio de sesin de SQL Server pertenece a la funcin pblica de servidor. Cuando a una entidad de seguridad de servidor no se le han concedido ni denegado permisos especficos para un objeto protegible, el usuario hereda los permisos concedidos a la funcin pblica para ese elemento. Solo asigne los permisos pblicos en cualquier objeto cuando desee que el objeto est disponible para todos los usuarios.

processadmin setupadmin bulkadmin diskadmin dbcreator public

Funciones en el nivel de base de datos Para administrar con facilidad los permisos en las bases de datos, SQL Server proporciona varias funciones, que son las entidades de seguridad que agrupan a otras entidades de seguridad. Son como los grupos del sistema operativo Microsoft Windows. Las funciones del nivel de base de datos se aplican a toda la base de datos en lo que respecta a su mbito de permisos. Nombre de funcin de nivel de base de datos db_owner

Descripcin Los miembros de la funcin de base de datos fija db_owner pueden realizar todas las actividades de configuracin y mantenimiento en la base de datos y tambin pueden quitar la base de datos. Los miembros de la funcin de base de datos fija db_securityadmin pueden modificar la pertenencia a funciones y administrar permisos. Si se agregan entidades de seguridad a esta funcin, podra habilitarse un aumento de privilegios no deseado. Los miembros de la funcin de base de datos fija db_accessadmin pueden agregar o quitar el acceso a la base de datos para inicios de sesin de Windows, grupos de Windows e inicios de sesin de SQL Server. Los miembros de la funcin de base de datos fija db_backupoperator pueden crear copias de seguridad de la base de datos. Los miembros de la funcin de base de datos fija db_ddladmin pueden ejecutar cualquier comando del lenguaje de definicin de datos (DDL) en una base de datos.

db_securityadmin

db_accessadmin

db_backupoperator db_ddladmin

10

db_datawriter db_datareader db_denydatawriter

Los miembros de la funcin de base de datos fija db_datawriter pueden agregar, eliminar o cambiar datos en todas las tablas de usuario. Los miembros de la funcin de base de datos fija db_datareader pueden leer todos los datos de todas las tablas de usuario. Los miembros de la funcin de base de datos fija db_denydatawriter no pueden agregar, modificar ni eliminar datos de tablas de usuario de una base de datos. Los miembros de la funcin de base de datos fija db_denydatareader no pueden leer datos de las tablas de usuario dentro de una base de datos.

db_denydatareader

Importacin y exportacin de datos


La utilidad bcp (Bcp.exe) es una herramienta de lnea de comandos que utiliza la API de importacin masiva de Bulk Copy Program o Programa de copia masiva (BCP). La utilidad bcp realiza las tareas siguientes: Exportaciones masivas de datos de una tabla de SQL Server a un archivo de datos. Exportaciones masivas de una consulta. Importaciones masivas de datos de un archivo de datos a una tabla de SQL Server. Genera archivos de formato.

Para tener acceso a la utilidad bcp, utilice el comando bcp. Para usar el comando bcp para realizar importaciones masivas de datos debe comprender el esquema de la tabla y los tipos de datos de sus columnas, a menos que se utilice un archivo con un formato ya existente. La utilidad bcp permite exportar datos de una tabla de SQL Server a un archivo de datos para utilizarlos en otros programas. Tambin permite importar datos a una tabla de SQL Server desde otro programa, normalmente otro sistema de administracin de bases de datos (DBMS). Los datos se exportan primero desde el programa de origen a un archivo de datos y, despus, se copian del archivo de datos a una tabla de SQL Server. El comando bcp proporciona modificadores para especificar el tipo de datos del archivo de datos y otra informacin. Si no se especifican estos modificadores, el comando solicitar informacin de formato, como el tipo de campos de datos de un archivo de datos A continuacin, el comando preguntar si se desea crear un archivo de formato con las respuestas interactivas. Si desea flexibilidad para operaciones futuras de importacin o exportacin masivas, un archivo de formato suele resultar til. Puede especificar el archivo de formato en comandos bcp posteriores para archivos de datos equivalentes. Revisar esta direccin: http://msdn.microsoft.com/es-es/library/ms162802(v=sql.105).aspx III. Requerimientos N 1 2 3 1 1 1 Cantidad Descripcin Gua de Laboratorio #11 de BD Memoria USB Maquina con SQL Server 2008

11

IV. Procedimiento Parte 1: Grupos de archivos En Mis documentos crear las siguientes carpetas.

BD_SQLG11 Archivos_NDF Archivo Primario

-Que tiene las siguientes subcarpetas -En esta carpeta estar el archivo secundario -en esta carpeta estar el archivo primario y el lgico

Creacin de una base de datos Ejercicio_filegroupNombre Donde Nombre debe colocar su nombre CREATE DATABASE Ejercicio_filegroupNombre ON PRIMARY ( NAME = 'Ejercicio_filegroupNombre ', FILENAME = 'C:\Documents and Settings\Usuario\Mis documentos\BD_SQLG11\Archivo Primario\Ejercicio_filegroupNombre _data.mdf' , SIZE = 5MB , MAXSIZE=10MB, FILEGROWTH = 1MB), Revisar direccin

FILEGROUP secundario ( NAME = 'Ejercicio_filegroupNombre_secundario', FILENAME = 'C:\Documents and Settings\Usuario\Mis documentos\BD_SQLG11\Archivos_NDF\Ejercicio_filegroupNombre_secun.ndf', SIZE = 1MB , MAXSIZE=3MB, FILEGROWTH = 1MB)

LOG ON ( NAME = 'Ejercicio_filegroupNombre_ldf', FILENAME = 'C:\Documents and Settings\Usuario\Mis documentos\BD_SQLG11\Archivo

12

Primario\Ejercicio_filegroupNombre_ldf.ldf' , SIZE = 1MB , MAXSIZE=2MB, FILEGROWTH = 1MB)

En este script se crea un archivo primario, el archivo lgico y el archivo secundario, revise las carpetas donde fueron creados estos 3 archivos. Ahora crearemos una tabla ofertas de la forma que siempre la creamos -- Crear una tabla en un filegroup no especifico CREATE TABLE ofertas (ID int IDENTITY PRIMARY KEY, Descripcion nvarchar(200), Fecha_inicio datetime, Fecha_fin datetime, Descuento decimal)

Revisemos las propiedades de la tabla para ver en que archivo fue guardada la tabla.

Ahora crearemos una tabla en el filegroup o grupo de archivo Secundario -- Crear una tabla en el filegroup llamada SECUNDARIO CREATE TABLE ofertas_2008 ( ID int IDENTITY PRIMARY KEY, Descripcion nvarchar(200), Fecha_inicio datetime, Fecha_fin datetime,

13

Descuento decimal (10,2) )ON secundario Revisamos las propiedades

Parte 2. ESQUEMAS 1. Crear la siguiente tabla CREATE TABLE alumno (carnet int PRIMARY KEY, nombre varchar(30) ) Luego de haber creado esta tabla revisamos en propiedades de la tabla y verificamos el esquema (scheme) en que fue asignado la tabla alumno.

2. Ahora Creamos un esquema con el nombre promociones CREATE SCHEMA Promociones

14

3. Creamos una tabla que se situ dentro del esquema Promociones

CREATE TABLE Promociones.Productos_descuento (IDProduct int PRIMARY KEY, Descuento decimal, Descripcion nvarchar(50)) Verificamos las propiedades de la tabla Productos _descuento

4. Al realizar consultas, se realizaran de la siguiente manera:

select * from Promociones.Productos_descuento

Note que debe digitar el nombre del esquema antes de la tabla. El esquema dbo no necesita escribirse antes de una tabla, ya que es el por defecto de SQL. 5. Al digitar la siguiente sentencia produce un error, porque SQL piensa que esta tabla pertenece al esquema dbo select * from Productos_descuento,

6. Para poder realizar la consulta anterior, se debe asignar la tabla Productos_descuento al esquema dbo. Lo haremos de la siguiente manera

ALTER SCHEMA dbo TRANSFER Promociones.Productos_descuento

15

GO

7. Ahora probemos nuevamente la consulta

select * from Productos_descuento, La consulta ya no da error porque el esquema fue cambiado. Revise las propiedades de la tabla para comprobar el esquema al que est asignado la tabla.

Parte 3: Creacin de usuarios Como primer punto vamos a definir un inicio de sesin para el/los futuros usuarios de la base de datos que quieran conectarse a nuestro servidor, es el caso para esta demostracin en la instalacin de SQL-SERVER 2008 fue elegido el modo de autenticacin de SQL. Realizar los siguientes pasos: a. Con el usuario sa, deber crear la base de datos Renta Video (utilizada la semana pasada) b. Crear el esquema inventario c. Colocar las tablas: pelculas, tipos y categoras en el esquema inventario 1. Creacin de inicios de sesin.

Para crear un inicio de sesin se utiliza la siguiente sintaxis. CREATE LOGIN nombre_login WITH PASSWORD = 'clave_usuario'; Ejemplo: Crearemos un inicio de sesin llamado superman utilizando la clave 123456 CREATE LOGIN superman WITH PASSWORD = '123456'; Para comprobar el inicio de sesin abriremos un nuevo SQL Server Management Studio e ingresaremos con los datos creados.

16

Una vez que iniciemos la sesin debemos de OBSERVAR cuidadosamente el explorador de objetos, porque?, porque debemos de tener claro a qu nivel se ubican los usuarios en cuando a la seguridad de acceso, el usuario recin creado forma parte de la seguridad para acceder al servidor, pero no quiere decir que este usuario est en un sub-nivel de base de datos. Para mayor comprensin podemos referirnos a la siguiente imagen.

La imagen muestra el login nuevo creado. Al analizar el rbol de carpetas, en un primer nivel o raz del rbol encontramos el servidor luego se ramifican las carpetas de bases de datos y la carpeta inicios de sesin, por lo tanto inicios de sesin est en el mismo nivel que la base de datos por no decir que esta en un nivel superior. Lo que quiere decir esto es que debemos de poseer un login para poder visualizar las bases de datos. Para poder tener acceso a las bases de datos primero debemos crear los USUARIOS de BASES DE DATOS.

Si intentamos acceder a la base de datos in haber creado un usuario respectivo nos encontraremos con el siguiente error. El cual nos dice que no es accesible la BD seleccionada.

17

2. Creacin de Usuarios de Bases de Datos

Para la creacin de usuarios de las bases de datos nos ayudaremos del siguiente cdigo. USE BASE_DE_DATOS; CREATE USER nombre_usuario FOR LOGIN nombre_login WITH DEFAULT_SCHEMA = algun_esquema; GO Ahora procederemos a crear un usuario llamado juanlopez y le asignaremos un inicio de sesin que creamos anteriormente llamado superman. USE RENTAVIDEO; CREATE USER juanlopez FOR LOGIN superman WITH DEFAULT_SCHEMA = dbo; GO

Ahora podemos para ir paso a paso desplacemos las tablas de la base de datos RENTAVIDEO, es decir ya como usuario llamado juanlopez dispongamos a ver las tablas (con intentar no se pierde nada). 18

Por lo tanto tenemos 2 opciones, dar permisos sobre un esquema a un usuario, o por otro lado asignar permisos de ciertas tablas al usuario. Caso 1 : Asignando permisos sobre esquemas. Vamos a asignarle un esquema al usuario, por ejemplo el esquema inventario. GRANT SELECT ON SCHEMA :: inventario TO juanlopez WITH GRANT OPTION GO Deben de tener cuidado en no confundir el inicio de sesin con el usuario de la BD. El resultado que produce el comando consiste en que el usuario jualopez podr ver el contenido de las tablas que estn agrupadas bajo el esquema del usuario correspondiente.

19

En ciertos casos puede ser no muy conveniente el asignar un usuario a todo un esquema, esto podra variar segn el rol que tengan en la BD tanto como en la administracin de la misma.

Pruebas SELECT en alguna tabla del esquema asignado

Como se puede apreciar el usuario efectivamente puede realizar un SELECT, pero podr el usuario realizar un DELETE o un INSERT o un UPDATE?, la respuesta es NO, debido a que solamente hemos asignado el permiso SELECT al usuario de la BD. Como quitar los permisos sobre un esquema? Esto sera como deshacer la otorgacin del permiso, para esto se utiliza la palabra REVOKE que en castellano significa revocar o quitar.

REVOKE SELECT ON SCHEMA :: inventario TO juanlopez CASCADE GO

Procedamos a remover el permiso creado sobre el esquema inventario.

20

Caso 2: Asignando permisos sobre tablas Como observamos el esquema inventario posee 3 tablas, pero vamos a disponer a asignar un solo usuario a 1 tablas del esquema. Podemos repetir el proceso para mas tablas de otros esquemas o del mismo esquema.

USE rentavideo; GRANT SELECT ON OBJECT::inventario.peliculas TO juanlopez; GO

21

Como quitar los permisos sobre una tabla? Cuando hablamos de quitar permiso sobre una tabla es lo mismo que lo hecho con el esquema, consiste en quitar o revocarlo usando la sentencia REVOKE. Y con la sentencia OBJECT especificamos la tabla seguido del usuario a quien lo quitaremos. USE rentavideo; REVOKE SELECT ON OBJECT::inventario.peliculas TO juanlopez; GO Ahora comprobemos el resultado

Efectivamente el usuario no podr tener control sobre esta tabla ACLARACION: Para los ejemplos mostrados nicamente he utilizado el permiso SELECT, este puede variar por UPDATE, DELETE, INSERT o cualquier otra accin para los diferentes ejemplos, para mayor deferencia pueden consultar la ayuda que viene con la instalacin del paquete. Adems el lector puede comprobar intentando hacer insert y delete, y podr verificar personalmente que solamente el permiso que asignemos ese ser tomado. 3. Remover usuarios de bases de datos.

Para poder remover efectivamente un usuario de la base de datos debemos de tener presente las siguientes consideraciones: 1. Eliminar los permisos sobre esquemas del usuario. 2. Eliminar los permisos sobre tablas del usuario. 3. Finalmente Eliminar el usuario de la Base de Datos. Sentencia para eliminar un permiso sobre esquema

22

REVOKE SELECT ON SCHEMA :: inventario TO juanlopez CASCADE GO Sentencia para eliminar un permiso sobre una tabla USE rentavideo; REVOKE SELECT ON OBJECT::inventario.peliculas TO juanlopez; GO Las dos sentencias anteriores fueron explicadas previamente en el punto 2 de la gua Finalmente cuando el usuario no posee permisos sobre esquemas o sobre tablas procedemos a eliminarlo de la Base de Datos. Sentencia para eliminar al usuario juanlopez --BORRAR UN USUARIO DROP USER juanlopez Resultados de la eliminacin

Este mensaje aparecer cuando intentemos acceder a la base de datos rentavideo. 4. Remover un inicio de sesin

Para remover un inicio de sesin debemos de asegurarnos de realizar el paso 3, que corresponde a eliminar el usuario de la base de datos que estn registrados bajo el inicio de sesin correspondiente. Debo aclarar que un usuario de Base de Datos y un Inicio de Sesion poseen relacin de 1 a 1, con esto quiero decir que a un usuario corresponde un inicio de sesin.

23

El usuario de la base de datos de rentavideo NO existe, por lo tanto procedemos a eliminar el inicio se sesin llamada superman que tiene un password 123456. Tambin para poder remover la sesin el usuario no deber de estar conectado o activo en el servidor. DROP LOGIN superman 5. Casos especiales (transferencias de esquemas y tablas entre usuarios) Puede en muchas ocasiones darse el caso de transferencia de puestos o de trabajos de forma temporal o definitiva, lo cual ocasiona cambios de permisos en las bases de datos. Para empezar creemos 2 login para simular que tenemos 2 usuarios distintos. CREATE LOGIN hulk WITH PASSWORD = '123456';

CREATE LOGIN xmen WITH PASSWORD = '123456';

Una vez creado los logins procedemos a la creacin de los usuarios de BD. Al usuario chepelopez le asignaremos un esquema por defecto llamado inventario, y al usuario moncholopez el esquema tienda.

USE RENTAVIDEO; CREATE USER chepelopez FOR LOGIN hulk; GO

24

GRANT SELECT ON SCHEMA :: inventario TO chepelopez WITH GRANT OPTION GO

USE RENTAVIDEO; CREATE USER moncholopez FOR LOGIN xmen; GO

GRANT SELECT ON SCHEMA :: tienda TO moncholopez WITH GRANT OPTION GO

Explorador de objetos de chepelopez

Explorador de objetos de moncholopez

Como cambiar o transferir esquemas entre usuarios? --TRANSFERIR ESQUEMAS ENTRE USUARIOS ALTER AUTHORIZATION 25

ON SCHEMA::[inventario] TO [moncholopez]

--TRANSFERIR ESQUEMAS ENTRE USUARIOS ALTER AUTHORIZATION ON SCHEMA::[tienda] TO [juanlopez]

De este modo realizamos la transferencia de permisos sobre esquemas entre usuarios. Explorador de objetos de chepelopez Explorador de objetos de moncholopez

Se puede observar claramente cmo cambian los esquemas y por lo tanto las tablas de los esquemas entre los usuarios, de este modo podemos simular un cambio de actividad laboral en una empresa. Tambin podemos agregarle trabajo extra al usuario chepelopez agregndole permisos de lectura sobre las tablas pelculas y categoras del esquema inventario. USE rentavideo; GRANT SELECT ON OBJECT::inventario.peliculas TO chepelopez; GO USE rentavideo; GRANT SELECT ON OBJECT::inventario.categorias TO chepelopez; GO

26

Por lo tanto el usuario chepelopez adems de tener el esquema tienda (por cierto este tiene una sola tabla asignada) tambin tendra 2 de las 3 tablas del esquema inventario.

Vamos a realizar un caso diferente, vamos a transferir el permiso que tiene el usuario moncholopez sobre la tabla tipos del esquema inventario y se los otorgaremos a chepelopez.

ALTER AUTHORIZATION ON OBJECT::inventario.tipos TO chepelopez;

Explorador de objetos de chepelopez

Explorador de objetos de moncholopez

Como ltimo punto si surge la interrogante de cmo hacer para mover una tabla que se encuentra en un esquema hacia otro esquema?, tambin es posible utilizando el siguiente comando. ALTER SCHEMA tienda TRANSFER inventario.peliculas; GO

27

En el cdigo anterior se realizo una transferencia de la tabla pelculas al esquema tienda. Explorador de objetos de chepelopez Explorador de objetos de moncholopez

Parte 4. Importacin y exportacin de datos utilizando la instruccin BCP A. Copiar filas de tablas en un archivo de datos (con una conexin de confianza) El siguiente ejemplo ilustra la opcin out de la tabla AdventureWorks.Sales.Customer. Este ejemplo crea un archivo de datos con el nombre Lista de Clientes.txt y copia los datos de la tabla en l usando el formato de caracteres. El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el smbolo del sistema, escriba el siguiente comando: bcp AdventureWorks.Sales.Customer out "Lista de Clientes.txt" -T c

B. Copiar filas de tablas en un archivo de datos (con autenticacin de modo mixto) El siguiente ejemplo ilustra la opcin out de la tabla AdventureWorks.Sales.SalesPerson. Este ejemplo crea un archivo de datos con el nombre Vendedores.txt y copia los datos de la tabla en l usando el formato de caracteres. En el ejemplo se asume que utiliza autenticacin de modo mixto. Debe utilizar el modificador -U para especificar el Id. de inicio de sesin. Asimismo, a menos que est conectando con la instancia predeterminada de SQL Server en el equipo local, utilice el modificador -S para especificar el nombre del sistema y, opcionalmente, un nombre de instancia. bcp AdventureWorks.Sales.SalesPerson out Vendedores.txt -c -U<login_id> S<server_name\instance_name> El sistema le solicitar la contrasea. Digite: bcp AdventureWorks.Sales.SalesPerson out Vendedores.txt -c U sa -

28

Presione la tecla ENTER y le pedir la contrasea, y vuelva a presionar la tecla ENTER para que comience la copia de los datos.

C. Copiar datos de un archivo en una tabla El siguiente ejemplo ilustra la opcin in utilizando el archivo creado en el ejemplo anterior (Vendedores.txt). No obstante, en primer lugar, este ejemplo crea una copia vaca de la tabla de AdventureWorks Sales.SalesPerson, en Sales.SalesPerson2, en la que se copian los datos. El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. Para crear la tabla vaca, en el Editor de consultas, escriba el siguiente comando: USE AdventureWorks; GO SELECT * INTO AdventureWorks.Sales.SalesPerson_carnet FROM AdventureWorks.Sales.Salesperson WHERE 1=2 Para realizar una copia masiva de los datos de caracteres en la nueva tabla, es decir, para importar los datos, escriba el siguiente comando en un smbolo del sistema: bcp AdventureWorks.Sales.SalesPerson_carnet in Vendedores.txt -T c Para comprobar que el comando se ha ejecutado correctamente, muestre el contenido en el Editor de consultas y escriba: USE AdventureWorks; GO SELECT * FROM Sales.SalesPerson_carnet

D. Copiar una columna especfica en un archivo de datos Para copiar una columna especfica, puede usar la opcin queryout. El siguiente ejemplo copia slo la columna Name de la tabla de Production.Product en un archivo de datos. El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el smbolo del sistema de Windows, escriba: 29

bcp "SELECT Name FROM AdventureWorks.Production.Product" queryout ProductoNombres.dat -T -cE. Copiar una fila especfica en un archivo de datos Para copiar una fila especfica, puede usar la opcin queryout. El siguiente ejemplo copia slo la fila del contacto con el nombre Jarrod Rana de la tabla de AdventureWorks.Person.Contact en un archivo de datos (Jarrod Rana.dat). El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el smbolo del sistema, escriba: bcp "SELECT * FROM AdventureWorks.Person.Contact WHERE FirstName='Jarrod' AND LastName='Rana' " queryout "Jarrod Rana.dat" -T -c Copiar datos de una consulta en un archivo de datos Para copiar el conjunto de resultados de una instruccin Transact-SQL en un archivo de datos, utilice la opcin queryout. El siguiente ejemplo copia los nombres de la tabla de AdventureWorks.Person.Contact, ordenados por el apellido y despus por el nombre, en el archivo de datos Contactos.txt. El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el smbolo del sistema, escriba: bcp "SELECT FirstName, LastName FROM AdventureWorks.Person.Contact ORDER BY LastName, Firstname" queryout Contactos.txt -c -T. Crear un archivo de formato no XML En el siguiente ejemplo se crea un archivo de formato no XML, Currency.fmt, para la tabla Sales.Currency de la base de datos AdventureWorks. El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el smbolo del sistema, escriba: bcp AdventureWorks.Sales.Currency format nul -T -c -f Currency.fmt

H. Crear un archivo de formato XML El siguiente ejemplo crea un archivo de formato XML con el nombre ProduccionDocumentacion.xml para la tabla Production.Document de la base de datos AdventureWorks. El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el smbolo del sistema, escriba: bcp AdventureWorks.Production.Document format nul -T -c -x -f ProduccionDocumentacion.xml Nota: Para utilizar el modificador -x, debe contar con un cliente bcp 9.0.

30

I. Utilizar un archivo de formato para importar de forma masiva con bcp Para usar un archivo de formato creado anteriormente al importar datos en una instancia de SQL Server, utilice el modificador -f con la opcin in. Por ejemplo, el siguiente comando copia de forma masiva el contenido de un archivo de datos, DocumentacionProduct.dat, en una copia de la tabla Production.Document (Production.Document_Carnet) mediante el archivo de formato creado anteriormente (ProduccionDocumentacion.xml). El ejemplo asume que se utiliza la autenticacin de Windows y que se tiene una conexin de confianza con la instancia del servidor en la que se ejecuta el comando bcp. En el editor de consultas de SQL Management Studio, escriba: USE AdventureWorks; GO SELECT * INTO AdventureWorks.Production.Document_Carnet FROM AdventureWorks. Production.Document WHERE 1=2

Crear el archivo de datos En el smbolo del sistema, escriba: bcp AdventureWorks. Production.Document out DocumentacionProduct.dat -c -T. Realizar la copia En el smbolo del sistema, escriba: bcp AdventureWorks.Production.Document_Carnet in DocumentacionProduct.dat -T -f ProduccionDocumentacion.xml Despus en el editor de consultas, escriba: SELECT * FROM AdventureWorks.Production.Document_Carnet Nota: Los archivos de formato son tiles cuando los campos del archivo de datos difieren de las columnas de la tabla; por ejemplo, en su numeracin, orden o tipos de datos. V. Anlisis de resultados Ejercicio. Uso de esquemas: Crear un esquema empleados que tenga 2 tablas Datos Id Nombres Apellidos int Varchar (30) Varchar (30) Departamento id nombre descripcion int Varchar(30) Varchar(50)

31

Crear un esquema depto Cambie la tabla Departamento al esquema depto. Crear un esquema llamado empleados Cambie la tabla la tabla de Datos al esquema empleados

Ejercicios. Uso de la instruccin BCP

1. Crear un archivo de datos de la tabla Person.Contact donde el primer nombre sea igual a James y debe ordenarlos por el apellido en forma descendente.

2. Crear un archivo de texto donde se copien los datos de los de empleados junto con el nombre del departamento donde trabajan.

3. Crear una tabla en la base de datos de la primera parte de la gua, la estructura de esta tabla debe ser igual a la tabla Person.Contact de la base de datos AdventureWorks y en esa nueva tabla debe guardar los datos de los contactos que se llamen James, los cuales se encuentran en el archivo de datos del numeral 2. VI. Referencia Bibliogrfica Microsoft SQL Server 2008, Gua Prctica, Francisco Charte Ojeda; Anaya Multimedia.

32

Potrebbero piacerti anche