Está en la página 1de 40

SQL Server 2000

Apuntes

Borja Sotomayor

30 de junio de 2002

c 2002 Borja Sotomayor

Estos apuntes han sido compuestos ı́ntegramente en LATEX.


Para producir el documento se ha utilizado pdfTEX-1.0a de la distribución MiKTEX.
http://www.miktex.org/
Se han utilizado los paquetes amssymb, babel, color, fancybox, graphicx, hyperref, inputenc,
scrbook y scrpage (KOMA–Script), titlesec, titletoc, pdfcrypt y url.
Las figuras (excepto las capturas de pantalla) han sido elaboradas con Microsoftr Visior
2002.
http://www.microsoft.com/office/visio/
Índice general

1. Introducción 1

2. Creación de Bases de Datos 3


2.1. Como crear una base de datos en SQL Server . . . . . . . . . . . . . . . . 3
2.2. Creación de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. Modificación de Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4. Eliminación de Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5. Creación de relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6. Vista “Diagrama” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.7. Otros aspectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3. Vistas 19
3.1. Como crear una vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2. Definición de la Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3. Propiedades de la Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4. Seguridad 25
4.1. Arquitectura de Seguridad en SQL Server . . . . . . . . . . . . . . . . . . 25
4.2. Inicios de Sesión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3. Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4. Permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

A. Tipos de Datos de SQL Server 33

B. Conexión a SQL Server desde un ASP 35

3
TEMA 1

Introducción

Estos apuntes son una introducción a SQL Server 2000, el sistema de gestión de bases
de datos de Microsoft. Se presupone que el lector tiene conocimientos de bases de datos
relacionales, por lo que los apuntes se centran en explicar el manejo del SQL Server, no
en explicar conceptos de bases de datos (por ejemplo, no se explica lo que es una relación
de 1 a N, sólo se explica como crearla en SQL Server).
El objetivo de estos apuntes es servir como material de apoyo a un cursillo de SQL
Server y como material de referencia, por lo que no se recomienda intentar ‘empezar
desde cero’ a manejar SQL Server utilizando exclusivamente estos apuntes.
Para todas las imágenes explicativas se ha utilizado una sencilla base de datos de
ejemplo que representa una tienda de informática. El diagrama relacional de esta base
de datos se muestra en la figura 1.1.
Estos apuntes se han preparado utilizando un SQL Server 2000 Standard Edition
ejecutándose sobre un Windows 2000 Server. Si el lector está utilizando otra versión de
SQL Server 2000 (Desktop Edition o Enterprise Edition), es posible que algunas opciones
y propiedades mencionadas en estos apuntes no aparezcan en su versión, o aparezcan
deshabilitadas.
Finalmente, todo comentario, opinión, sugerencia o crı́tica (constructiva y/o destruc-
tiva) será bienvenida en la dirección borja@borjanet.com

' $

ARTICULOS
FABRICANTES
PK Codigo int identity
PK Codigo int identity
Nombre nvarchar(100)
Nombre nvarchar(100) Precio int
FK1 Fabricante int

Figura 1.1.: Diagrama relacional de la Tienda de Informática.


& %

1
TEMA 2

Creación de Bases de Datos

2.1 Como crear una base de datos en SQL Server


Para crear una base de datos debemos situarnos en la carpeta Bases de Datos de nuestro
servidor y, utilizando el menú de contexto o el menú acción, seleccionar la opción Nueva
base de datos. . . (ver figura 2.1).
Aparecerá una nueva ventana que nos permite especificar las opciones iniciales de la
nueva base de datos (ver figura 2.2). Esta ventana consiste de tres pestañas: General,
Archivo de Datos y Registro de Transacciones.

General: El único dato que se puede introducir en esta pestaña es el nombre de la base
de datos. Este dato es obligatorio.

Archivo de Datos: En esta pestaña podemos especificar cuales son los ficheros donde
se almacenará la base de datos, ası́ como su ubicación. Los valores por defecto que
da SQL Server son válidos en la mayorı́a de los casos. Únicamente cabe destacar
que, por defecto, los archivos se sitúan en el directorio donde está instalado SQL
Server. Una vez creado el fichero de datos de la base de datos, su ubicación no
puede ser modificada. Por lo tanto, si se desea situar el fichero en otro directorio,
es necesario hacerlo en este momento.

Registro de Transacciones: En esta pestaña podemos especificar cuales son los ficheros
donde se almacenará el registro de transacciones, ası́ como su ubicación. El registro
de transacciones se utiliza para realizar recuperaciones de la base de datos. Al igual
que los ‘Archivos de Datos’, los valores por defecto que proporciona SQL Server
son válidos en la mayorı́a de los casos.

Una vez creada la base de datos, aparecerá en la carpeta Bases de Datos. Si hacemos
click sobre el icono  que aparece al lado de la nueva base de datos, veremos que ésta
contiene varios elementos (ver figura 2.3):

Diagramas: Nos permite elaborar las relaciones entre tablas gráficamente, utilizando un
diagrama relacional. Se verá en la sección 2.6.

3
2. Creación de Bases de Datos

' $

Figura 2.1.: Creación de una base de datos.


& %

' $

Figura 2.2.: Opciones de la nueva base de datos.


& %

4 SQL Server 2000. Apuntes.


2.1. Como crear una base de datos en SQL Server

' $

Figura 2.3.: Elementos de una base de datos.


& %

Tablas: Nos permite ver las tablas de nuestra base de datos. La creación de tablas se
verá en la sección 2.2.

Vistas: Nos permite ver las vistas definidas en nuestra base de datos. Las vistas se
explican en el tema 3.

Procedimientos Almacenados: Nos permite ver los procedimientos almacenados que


hay en nuestra base de datos. Estos apuntes no cubren este tema.

Usuarios: Nos permite ver los usuarios definidos en nuestra base de datos, ası́ como
cambiar sus permisos. Se ven en el tema 4.

Funciones: Nos permite ver las funciones (similares a los procedimientos almacenados)
definidas en nuestra base de datos. Estos apuntes no cubren este tema.

Reglas: Similares a (aunque menos potentes que) las restricciones CHECK que se verán
en la sección 2.7. La reglas se mantienen en SQL Server por compatibilidad con
versiones anteriores.

Valores Predeterminados: Permite establecer los valores por defecto de una tabla. Este
elemento se mantiene por compatibilidad con versiones anteriores (en la práctica,
lo habitual es establecer los valores por defecto al crear la tabla).

Tipos de datos definidos por el usuario: SQL Server permite que el usuario defina sus
propios tipos de datos a partir de los tipos de datos fundamentales (por ejem-

SQL Server 2000. Apuntes. 5


2. Creación de Bases de Datos

' $

Figura 2.4.: Creación de una nueva tabla.


& %

plo, definir un tipo de datos llamado Teléfono que sea una cadena de caracteres
numéricos con longitud 9). Estos apuntes no cubren este tema.

2.2 Creación de tablas


Si hacemos click sobre el elemento Tablas de nuestra base de datos, podremos ver las
tablas existentes (ver figura 2.4, panel de la derecha). En una base de datos recién
creada únicamente hay tablas del sistema (syscolumns, sysfiles, etc.). Estas tablas las
utiliza SQL Server para almacenar datos del sistema (configuraciones, estructuras de
las tablas de usuario, ficheros de datos, etc.) y en ningún caso deben ser manipuladas
directamente.
Si queremos crear una tabla nueva (una tabla de usuario), basta con hacer click sobre
el elemento Tablas y, utilizando el menú de contexto o el menú Acción, seleccionar la
opción Nueva tabla. . . (ver figura 2.4, panel de la izquierda).
En este momento se nos presenta la ventana de Diseño de Tabla (ver figura 2.5).
Esta ventana está dividida en dos partes: el panel superior que nos permite definir las
columnas de la tabla, y el panel inferior que nos permite definir las propiedades de cada
columna.

Definición de Columnas
Para definir las columnas de la nueva tabla utilizaremos el panel superior, que inicial-
mente está vacı́o. Por cada columna de la tabla deberemos rellenar una fila en el panel

6 SQL Server 2000. Apuntes.


2.2. Creación de tablas

' $

Figura 2.5.: Ventana de diseño de tabla.


& %

SQL Server 2000. Apuntes. 7


2. Creación de Bases de Datos

' $

Figura 2.6.: Ventana de diseño de tabla con columnas defi-


nidas.
& %

superior. Por cada columna deberemos especificar, como mı́nimo, lo siguiente:

Nombre de columna: Puede estar formado por letras, números, el signo de subrayado
( ), la arroba (@) o la almohadilla (#), pero debe empezar por una letra (también
está permitido que empiece por ciertos sı́mbolos, pero su uso está recomendado
para casos muy concretos).

Tipo de datos: Consultar el apéndice A para ver una lista de todos los tipos de datos
permitidos en SQL Server.

Longitud: Indica la longitud (o precisión) del tipo de datos. Al seleccionar un tipo de


datos, SQL Server introduce una longitud predeterminada para ese tipo de datos.
Esta longitud sólo puede modificarse en los tipos de datos binary, char, nchar,
varbinary, varchar o nvarchar. Consultar el apéndice A para ver el significado
concreto de la longitud en cada tipo de datos.

Permitir valores nulos: Indica si esta columna puede tener el valor especial NULL.

En la figura 2.6 se muestra el aspecto del panel superior tras introducir cuatro colum-
nas.

Propiedades de Columna
Por cada columna definida se pueden modificar una serie de propiedades que aparecen
en el panel inferior (ver figura 2.7). No todas las propiedades pueden modificarse, ya que
algunas dependen del tipo de datos de la columna.

Valor predeterminado: Si al producirse una inserción en la base de datos, y en la inser-


ción no se especifica un valor para una columna, entonces se introducirá el valor de
esta propiedad. En caso de no definirse explı́citamente un valor predeterminado,
éste será NULL. No puede definirse un valor predeterminado para columnas de
tipo timestamp o de identidad.

Precisión y Escala: Solamente se puede cambiar esta propiedad para los tipos de datos
decimal y numeric. En ambos tipos de datos, la precisión hace referencia al número
máximo de dı́gitos que puede tener un valor de la columna. La escala hace referencia
al número máximo de dı́gitos que pueden aparecen a la derecha de la coma decimal.

8 SQL Server 2000. Apuntes.


2.2. Creación de tablas

' $

Figura 2.7.: Opciones de columna.


& %

Identidad: Indica que la columna es autonumérica. Es decir, SQL Server asigna automáti-
camente un valor a esta columna cada vez que se produce una inserción. Esta
propiedad sólo está disponible para tipos de datos numéricos enteros (p.ej. int).

Inicialización de la identidad: Valor inicial de una columna identidad.

Incremento de la identidad: Incremento que se produce en el valor de una columna


identidad entre cada inserción.

EsRowGuid: Indica que esta columna identifica a la fila en un contexto global (no local,
como hace una clave primaria). Únicamente puede aplicarse a columnas de tipo
uniqueidentifier, y no puede haber más de una columna en una tabla que sea
ROWGUID.

Fórmula: En caso de que la columna sea una columna calculada, aquı́ debe introducirse
su formula. Las columnas calculadas son propias de Analysis Services, una parte
de SQL Server que no se trata en estos apuntes.

Establecer Clave Primaria


Para establecer la clave primaria basta con seleccionar en el panel superior una columna
y hacer click sobre el botón Clave primaria de la barra de botones (ver figura 2.8). A la
izquierda de la columna seleccionada aparecerá un icono con forma de llave, simbolizando
que esa columna es la clave primaria de la tabla.
En caso de que la clave primaria sea compuesta (tenga más de una columna), el
procedimiento a seguir es igual que para claves primarias sencillas. Sin embargo, para
seleccionar varias columnas es necesario hacer click sobre ellas mientras se mantiene
pulsada la tecla Ctrl (es necesario hacer click en el espacio que hay a la izquierda del
nombre de la columna).

SQL Server 2000. Apuntes. 9


2. Creación de Bases de Datos

' $

Figura 2.8.: Establecimiento de la clave primaria.


& %

' $

Figura 2.9.: Guardar la tabla.


& %

Guardar la Tabla

Una vez definida por completo la tabla, será necesario guardarla. Para ello basta con
hacer click sobre el botón Guardar de la barra de botones (ver figura 2.9). En este
momento se pedirá el nombre de la tabla.

2.3 Modificación de Tablas


Para añadir/eliminar/modificar columnas de una tabla, basta con volver a la ventana de
Diseño de tabla. Esta ventana es exactamente igual que la vista en la sección 2.2. Para
abrir esta ventana hay que hacer click sobre la tabla en el Administrador Corporativo
y, a través del menú de contexto o el menú Acción, seleccionar la opción Diseñar tabla
(ver figura 2.10).
En la ventana de Diseño de tabla, además de modificar las columnas, se pueden realizar
otras acciones tales como crear relaciones entre tablas (sección 2.5), ı́ndices y restricciones
CHECK (sección 2.7). Estás acciones también pueden realizarse al crear la tabla.

10 SQL Server 2000. Apuntes.


2.4. Eliminación de Tablas

' $

Figura 2.10.: Diseñar tabla.


& %

' $

Figura 2.11.: Botón para administrar relaciones.


& %

2.4 Eliminación de Tablas


Para eliminar por completo una tabla debemos hacer click sobre la tabla en el Admi-
nistrador Corporativo y, a través del menú de contexto o el menú Acción, seleccionar la
opción Eliminar.
En caso de que haya tablas dependientes de la tabla que vamos a eliminar, se nos
notificará de ello y no podremos eliminar la tabla hasta que hayamos eliminado o las
relaciones o las tablas dependientes.

2.5 Creación de relaciones


Para crear una relación de 1 a N entres dos tablas (es decir, para crear claves externas)
habrá que abrir la ventada de Diseño de tabla de cualquiera de las dos tablas que se
desea relacionar. Una vez ahı́, hay que hacer click en el botón Administrar relaciones. . .
de la barra de botones (ver figura 2.11).
Aparecerá una ventana con cuatro pestañas. Inicialmente estaremos situados en la
pestaña Relaciones (ver figura 2.12). Aquı́ se nos muestran todas las relaciones creadas
sobre esta tabla (tanto si la tabla es el ‘lado 1’ como si es el ‘lado N’).
Para crear una nueva relación tendremos que pulsar el botón Nueva, lo que nos crea

SQL Server 2000. Apuntes. 11


2. Creación de Bases de Datos

' $

Figura 2.12.: Propiedades de una relación.


& %

una relación con las siguientes propiedades:

SQL Server crea automáticamente un nombre para la relación, que está compuesto
por los nombres de las dos tablas.
SQL Server supone que la tabla que estamos modificando va a ser el ‘lado N’ (lo
que SQL Server llama Tabla de claves externas).
La tabla del ‘lado 1’ (Tabla de claves principales) será inicialmente la primera tabla
(en orden alfabético) de nuestra base de datos.

Partiendo de esta situación, para configurar por completo la relación deberemos seguir
los siguientes pasos:

1. Establecer la Tabla de claves externas y la Tabla de claves principales.


2. Escoger, en ambos casos, las columnas que formarán parte de la relación.
3. (Opcional) Cambiar el nombre de relación. No suele ser necesario, salvo que se
quiera seguir una nomenclatura concreta.
4. Modificar las opciones de la relación:
Comprobar datos existentes al crear: Si la relación se crea sobre tablas que ya
tienen datos, se comprueba que los datos existentes no rompen la integridad
referencial.

12 SQL Server 2000. Apuntes.


2.6. Vista “Diagrama”

' $

Figura 2.13.: Nuevo diagrama.


& %

Exigir relación para duplicación: Mantiene la relación al hacer copias de las tablas
a otras bases de datos.
Exigir relación para INSERT y UPDATE: Se verifica que el resultado de una in-
serción, actualización o eliminación no rompe la integridad referencial.
Actualizar en cascada los campos relacionados: Activa la actualización en cas-
cada.
Eliminar en cascada los campos relacionados: Activa la eliminación en cascada.

2.6 Vista “Diagrama”


Si tenemos una base de datos con muchas tablas, crear todas las relaciones una a una
utilizando el procedimiento anterior puede ser muy laborioso. SQL Server nos proporcio-
na una manera más fácil y rápida de crear relaciones: a través de un diagrama relacional
de la base de datos.
Para crear un nuevo diagrama hay que situarse en el elemento Diagramas de nuestra
base de datos y, a través del menú de contexto o del menú Acción, seleccionar la opción
Nuevo diagrama de base de datos. . . (ver figura 2.13).
Antes de poder ver la ventana del nuevo diagrama se nos presentará un ‘asistente’
cuyo propósito es preguntarnos las tablas que formarán parte del diagrama. Una vez
seleccionadas, éstas aparecerán en la ventana del nuevo diagrama. Si ya hay relaciones
creadas, también aparecerán.
Para crear una nueva relación en el diagrama basta con ‘arrastrar’ la clave primaria
de la tabla que sea el ‘lado 1’ a la tabla que sea el ‘lado N’, tal y como muestra la
figura 2.14.
Cuando ‘dejemos caer’ la clave primaria se abrirá una ventana donde podemos modi-
ficar las propiedades de la relación (ver figura 2.15) . De hecho, si ‘dejamos caer’ la clave
primaria sobre el campo que va a ser clave externa, la relación ya estará fundamental-
mente configurada, y bastará con modificar las opciones (son las mismas que se vieron
en la sección anterior).

SQL Server 2000. Apuntes. 13


2. Creación de Bases de Datos

' $

Figura 2.14.: Creación de una relación en el editor de dia-


gramas.
& %

' $

Figura 2.15.: Propiedades de una relación en el editor de


diagramas.
& %

14 SQL Server 2000. Apuntes.


2.7. Otros aspectos

' $

Figura 2.16.: Representación de una relación en el editor de


diagramas.
& %

' $

Figura 2.17.: Botones para crear ı́ndices y para crear restricciones CHECK.
& %

Si pulsamos el botón ‘Aceptar’, la relación se crea y se representa mediante un enlace


entre las dos tablas (ver figura 2.16). El lado 1 se representa por una llave, y el lado N
se representa por el sı́mbolo ∞.
Una vez creadas todas las relaciones será necesario guardar los cambios pulsando el
botón Guardar de la barra de botones (cuyo icono es un disquete).

2.7 Otros aspectos


Desde la ventana de Diseño de tabla también podremos definir ı́ndices y crear restriccio-
nes CHECK. Para crear un ı́ndice hay que pulsar el botón Administrar ı́ndices/claves. . .
y para crear restricciones CHECK hay que pulsar el botón Administrar restricciones. . .
(ver figura 2.17).

Índices
La ventana de creación de ı́ndices (ver figura 2.18) tiene las siguientes opciones:

Nuevo: Nos permite crear un nuevo ı́ndice.

Eliminar: Nos permite eliminar un ı́ndice ya existente.

Nombre del ı́ndice: SQL Server suministra un nombre predeterminado. Este nombre
puede modificarse.

Nombre de columna / Ordenar: Columnas que forman parte del ı́ndice, y el orden en
el que aparecen en el ı́ndice.

SQL Server 2000. Apuntes. 15


2. Creación de Bases de Datos

' $

Figura 2.18.: Propiedades de un ı́ndice.


& %

Grupo de archivos del ı́ndice: Grupo de archivos en el que se almacena el ı́ndice. Si no


se han definido grupos de archivos, siempre es PRIMARY.

Crear con UNIQUE: Nos permite indicar que el ı́ndice debe ser único. Es decir, que
no se pueden dar valores repetidos en el ı́ndice. Podemos optar entre la opción
Restricción (simplemente se comprueba que no hay valores repetidos, pero sin
crear un ı́ndice) o la opción Índice (sı́ crea un ı́ndice). En este último caso, si
seleccionamos la opción Pasar por alto clave duplicada la inserción de un valor
repetido en el ı́ndice no produce un error, sino que sencillamente se ignora.

Factor de relleno: Indica la cantidad de espacio que puede ocuparse en cada página
del ı́ndice (el espacio libre se reserva para acomodar el crecimiento del ı́ndice). Se
recomienda no modificar el valor por defecto salvo en casos muy concretos.

Crear con CLUSTERED: Cuando un ı́ndice se crea con CLUSTERED, el orden fı́sico
(en el disco) de los datos de la tabla coincide con el orden lógico del ı́ndice. Esto
optimiza ciertos tipos de consultas. Solo puede haber un ı́ndice CLUSTERED por
cada tabla.

No volver a calcular estadı́sticas automáticamente: SQL Server utiliza internamente


una serie de estadı́sticas para optimizar las consultas que se realizan sobre la ba-
se de datos. Seleccionando esta opción se le indica a SQL Server que no debe
actualizar automáticamente las estadı́sticas de este ı́ndice (habrá que hacerlo ma-

16 SQL Server 2000. Apuntes.


2.7. Otros aspectos

' $

Figura 2.19.: Propiedades de una restricción CHECK.


& %

nualmente). No se recomiendo activar esta opción, ya que puede resultar en un


bajo rendimiento.

Restricciones CHECK
La ventana de creación de restricciones CHECK (ver figura 2.19) tiene las siguientes
opciones:

Nuevo: Nos permite crear una nueva restricción CHECK.

Eliminar: Nos permite eliminar una restricción ya existente.

Nombre de restricción: SQL Server suministra un nombre predeterminado. En el caso


de las restricciones se recomienda cambiarlo, ya que en caso de que una consulta
incumpla la restricción se mostrará el nombre de la restricción (por lo que conviene
que tenga un nombre significativo).

Expresión de la restricción: La restricción expresada con sintaxis de SQL.

Comprobar datos existentes al crear: Si la restricción se crea sobre una tabla que ya
tiene datos, se comprueba que los datos cumplen la restricción.

Exigir restricción para duplicación: Mantiene la restricción al hacer copias de la tabla


a otra base de datos.

SQL Server 2000. Apuntes. 17


2. Creación de Bases de Datos

Exigir restricción para INSERT y UPDATE: Se verifica que el resultado de una inser-
ción, actualización o eliminación cumple la restricción.

18 SQL Server 2000. Apuntes.


TEMA 3

Vistas

3.1 Como crear una vista


Para crear una vista situarnos en la carpeta Bases de Datos de nuestro servidor, abrir
la base de datos donde queremos crear la vista, seleccionar el elemento Vistas y, utili-
zando el menú de contexto o el menú Acción, seleccionar la opción Nueva vista. . . (ver
figura 3.1).
Al seleccionar la opción Nueva vista. . . se nos presentará el interfaz de definición de
vistas (ver figura 3.2), que nos permite definir de manera fácil e intuitiva la vista. Como
veremos más adelante, la vista también puede definirse especificando la consulta SELECT
de la vista, siendo esta opción la más versátil y completa1 (aunque no tan cómoda como
el interfaz gráfico).

3.2 Definición de la Vista


Para definir la vista primero debemos especificar qué tablas forman parte de la vis-
ta. Podemos hacer esto pulsando el botón Agregar tabla de la barra de botones (ver
figura 3.3).
Esto nos muestra una ventana (ver figura 3.4) con una lista de todas las tablas de
nuestra base de datos (incluidas las tablas del sistema). Podemos seleccionar varias
tablas si mantenemos pulsada la tecla Ctrl mientras hacemos click sobre los nombres
de las tablas. Una vez seleccionadas las tablas, la tablas se añadirán a la vista en cuanto
pulsemos el botón Agregar.
Las tablas agregadas aparecerán en el panel superior. Si hay relaciones definidas entre
las tablas, también aparecerán. Podemos seleccionar qué campos formarán parte de la
vista marcando el check box que aparece a la izquierda de cada nombre de campo.
En el segundo panel aparecen los campos seleccionados, de los que podemos modificar
ciertas opciones (orden, criterios a cumplir, etc.). En el tercer panel aparece la sentencia
SQL generada, que podemos editar nosotros mismos. Finalmente, si pulsamos el botón
1
El interfaz gráfico de vistas no permite definir ciertos tipos de vistas, como vistas que contengan la
cláusula UNION. En estos casos no habrá más remedio que definir la consulta utilizando SQL.

19
3. Vistas

' $

Figura 3.1.: Creación de una nueva vista.


& %

' $

Figura 3.2.: Ventana de definición de la vista.


& %

20 SQL Server 2000. Apuntes.


3.2. Definición de la Vista

' $

Figura 3.3.: Agregar una nueva tabla a la definición de la vista.


& %

' $

Figura 3.4.: Selección de tablas.


& %

SQL Server 2000. Apuntes. 21


3. Vistas

' $

Figura 3.5.: Una vista definida.


& %

Ejecutar de la barra de botones (ver figura 3.5) podremos ver el resultado de la consulta
en el panel inferior.
Para guardar la vista debemos pulsar el botón Guardar (esquina superior izquierda
de la barra de botones, con icono de disquete). Antes de guardar la vista se nos pedirá el
nombre con el que queremos guardar la vista (ver figura 3.6).

3.3 Propiedades de la Vista


Las únicas propiedades modificables de una vista son sus permisos (ver tema 4) y la
sentencia SQL de la vista. Para modificarla, tendremos que seleccionar la vista y, a
través del menú de contexto o con el menú Acción, seleccionar la opción Propiedades

' $

Figura 3.6.: Guardar la vista.


& %

22 SQL Server 2000. Apuntes.


3.3. Propiedades de la Vista

' $

Figura 3.7.: Ver propiedades de una vista.


& %

(ver figura 3.7).


Esto nos muestra la ventana de propiedades de la vista (ver figura 3.8) donde podemos
editar directamente la sentencia CREATE VIEW que define la vista. Además, se nos ofrece
la opción de comprobar que la sintaxis de la sentencia es correcta. Nótese que este campo
de edición de SQL es más potente que el que proporciona el interfaz gráfico de creación
de vistas, ya que este último es incapaz de interpretar todos los tipos de sentencias
SELECT.

SQL Server 2000. Apuntes. 23


3. Vistas

' $

Figura 3.8.: Propiedades de una vista.


& %

24 SQL Server 2000. Apuntes.


TEMA 4

Seguridad

4.1 Arquitectura de Seguridad en SQL Server


En cualquier base de datos que vaya a ser utilizada por varios usuarios distintos, casi
siempre es imprescindible establecer una polı́tica de seguridad. Establecer una polı́tica
de seguridad consiste generalmente de los siguientes pasos:

1. Autenticación: Identificar qué usuarios podrán acceder a nuestro sistema de base


de datos.
2. Autorización a nivel de base de datos: Entre los usuarios que hemos identificado,
determinar a qué bases de datos podrán acceder dentro de nuestro sistema.
3. Autorización a nivel de datos y operaciones: En cada base de datos, por cada
usuario que tenga acceso a dicha base de datos, debemos decidir a qué datos y
operaciones podrá acceder.

Tal y como muestra la figura 4.1, podrı́a decirse que la polı́tica de seguridad pone una
serie de ‘barreras’ entre el usuario y la base de datos. SQL Server nos permite establecer
una polı́tica de seguridad siguiendo estos tres pasos.

Por cada usuario que vaya a acceder a nuestro sistema de base de datos deberemos
crear un inicio de sesión
' $

Figura 4.1.: Arquitectura de Seguridad en SQL Server.


& %

25
4. Seguridad

Por cada base de datos a la que tenga que acceder cierto usuario, deberemos crearle
a su inicio de sesión una cuenta de usuario en dicha base de datos.

Una vez que el usuario tiene una cuenta en la base de datos, le daremos unos
permisos concretos en cada tabla, en los procedimientos almacenados, etc.

4.2 Inicios de Sesión


SQL Server nos permite crear dos tipos de inicio de sesión:

Inicios de Sesión de SQL Server: Son válidos únicamente dentro de SQL Server. Para
crearlo hay que suministrar un identificador de inicio de sesión y la contraseña que
tendrá dicho inicio de sesión.

Inicios de Sesión de Windows NT: En vez de crear un inicio de sesión dentro de SQL
Server, se utiliza una cuenta de usuario (o grupo de usuarios) ya existente de
Windows NT 4.0 o de Windows 2000. Para crearlo basta con indicar qué usuario o
grupo de usuarios podrá acceder al SQL Server. Esta modalidad es especialmente
útil cuando ya se ha creado una polı́tica de seguridad en Windows NT o Windows
2000 (por lo que no será necesario volver a crearla en SQL Server) o cuando se va
a acceder al SQL Server desde un ASP (ver apéndice B).

Cómo Crear un Inicio de Sesión


Para crear un inicio de sesión debemos situarnos en la carpeta Seguridad de nuestro
servidor, seleccionar el elemento Inicios de Sesión y, utilizando el menú de contexto o
el menú Acción, seleccionar la opción Nuevo inicio de sesión. . . (ver figura 4.2).
Se nos mostrará la ventana de propiedades del nuevo inicio de sesión (ver figura 4.3).
Podemos escoger entre autenticación de Windows o autenticación de SQL Server.

Windows: En el campo Nombre debemos indicar el nombre de usuario o de grupo de


usuarios al que vamos a conceder acceso al SQL Server. En el campo Dominio
debemos especificar el dominio al que pertenece dicho usuario. Finalmente, podre-
mos indicar explı́citamente si ese usuario podrá acceder (Conceder acceso) o no
podrá acceder (Denegar acceso).

SQL Server: En el campo Nombre debemos indicar el nombre del nuevo inicio de sesión.
En el campo Contraseña indicaremos su contraseña.

En ambos casos debemos especificar el idioma y la base de datos predeterminados


para el inicio de sesión (los que tendrá en caso de no especificarlo explı́citamente al
conectarse).
Si accedemos a la pestaña Funciones del servidor podremos darle al inicio de sesión
privilegios de administración. Las funciones del servidor están resumidas en la tabla 4.1.
En la pestaña Acceso a bases de datos (ver figura 4.4) crear cuentas de usuario para
el inicio de sesión en las bases de datos del sistema. Esta operación no es estrictamen-
te obligatoria (podemos realizarla en otro momento, ver la siguiente sección) pero es
aconsejable crear las cuentas de usuario al mismo tiempo que el inicio de sesión.

26 SQL Server 2000. Apuntes.


4.2. Inicios de Sesión

' $

Figura 4.2.: Nuevo inicio de sesión.


& %

' $

Figura 4.3.: Propiedades de un inicio de sesión.


& %

SQL Server 2000. Apuntes. 27


4. Seguridad

Nombre Función Descripción


sysadmin Puede realizar cualquier operación en el SQL Server.
serveradmin Puede cambiar las opciones de configuración del servi-
dor.
setupadmin Puede realizar ciertas operaciones de configuración del
sistema.
securityadmin Puede modificar los inicios de sesión.
processadmin Puede administrar los procesos que se ejecutan en el
SQL Server.
dbcreator Puede crear y modificar bases de datos.
diskadmin Puede administrar los archivos de bases de datos de
SQL Server.
bulkadmin Puede ejecutar la instrucción BULK INSERT.

Cuadro 4.1.: Funciones de servidor

' $

Figura 4.4.: Bases de datos a las que tiene acceso un inicio


de sesión.
& %

28 SQL Server 2000. Apuntes.


4.3. Usuarios

Nombre Función Descripción


public Es la función por defecto al que pertenecen todos los
usuarios de la base de datos.
db owner Puede realizar cualquier operación dentro de la base de
datos.
db accessadmin Puede modificar las cuentas de usuario de la base de
datos.
db datareader Por defecto, puede realizar cualquier operación de lec-
tura (salvo que se le deniegue explı́citamente ese per-
miso).
db datawriter Por defecto, puede realizar cualquier operación de es-
critura (salvo que se le deniegue explı́citamente ese per-
miso).
db ddladmin Puede modificar la estructura de la base de datos (crear
tablas, modificar tablas, etc.).
db securityadmin Puede crear nuevas funciones y establecer permisos.
db backupoperator Puede realizar copias de seguridad de la base de datos.
db denydatareader No puede realizar ninguna operación de lectura (inde-
pendientemente de los permisos establecidos).
db denydatawriter No puede realizar ninguna operación de escritura (in-
dependientemente de los permisos establecidos).

Cuadro 4.2.: Funciones de base de datos

Para crear las cuentas de usuario, simplemente tenemos que seleccionar las bases de
datos a las que tendrá acceso el inicio de sesión. Inicialmente, el nombre de la cuenta de
usuario es el mismo que el nombre del inicio de sesión. Este nombre puede cambiarse,
aunque no es habitual hacerlo. Finalmente, en cada base de datos seleccionada, podemos
asignarle a la cuenta de usuario unas funciones de base de datos, que aparecen resumidas
en la tabla 4.2.
Para finalizar la creación del inicio de sesión basta con pulsar el botón Aceptar.

4.3 Usuarios
Aunque es aconsejable crear las cuentas de usuario al mismo tiempo que los inicios de
sesión, también pueden crearse por separado. Para ello hay que seguir los siguientes
pasos:

1. Debemos seleccionar el elemento Usuarios de nuestra base de datos y, utilizando


el menú de contexto o el menú Acción, seleccionar la opción Nuevo usuario de base
de datos. . . .
2. Aparecerá una ventana titulada Propiedades del usuario de la base de datos. En
ella debemos suministrar los siguientes tres datos:
Inicio de sesión a la que está vinculada esta cuenta de usuario.

SQL Server 2000. Apuntes. 29


4. Seguridad

' $

Figura 4.5.: Permisos de un usuario.


& %

Nombre de usuario (no tiene por qué ser el mismo que el inicio de sesión).
Funciones de base de datos a las que pertenece el usuario. Ver tabla 4.2.

3. Pulsar el botón Aceptar.

4.4 Permisos
Una vez creados los inicios de sesión y las cuentas de usuario, hay que dar permisos a
los usuarios. Al dar ‘permisos’ especificaremos para cada usuario que operaciones puede
realizar sobre cada objeto de la base de datos. Por ejemplo, los permisos podrı́an consistir
en lo siguiente:

El usuario X puede ejecutar sentencias SELECT, INSERT y UPDATE sobre las tablas
A y B, pero no puede realizar sentencias DELETE.

El usuario Y puede ejecutar sentencias SELECT sobre la tabla C, pero solo sobre
sus campos Ca, Cb y Cc.

El usuario Z puede ejecutar el procedimiento almacenado P, pero no puede ejecutar


los procedimientos Q y R.

Como fijar los permisos de un usuario


Para fijar los permisos de un usuario debemos seleccionar dicho usuario (en el elemento
Usuarios de nuestra base de datos) y, a través del menú de contexto o del menú Ac-
ción, seleccionar la opción Propiedades. Esto nos muestra la ventana de propiedades del
usuario, donde debemos pulsar el botón Permisos. . . . Esto nos muestra la ventana de
permisos del usuario (ver figura 4.5). En esta ventana se nos muestra una tabla con una
fila por cada tabla de la base de datos. A través de los check boxes que hay en cada

30 SQL Server 2000. Apuntes.


4.4. Permisos

fila podremos modificar los permisos que tiene el usuario seleccionado en esa tabla. Los
permisos que podremos modificar son:

SELECT: Permiso para realizar consultas de selección.

INSERT: Permiso para ejecutar sentencias de inserción.

UPDATE: Permiso para ejecutar sentencias de actualización.

DELETE: Permiso para ejecutar sentencias de eliminación.

EXEC: Permiso de ejecución (sólo procedimientos almacenados)

DRI: Permiso de ‘integridad referencial declarativa’ (permiso para realizar actualizacio-


nes y borrados en cascada en caso de que no se tenga explı́citamente permiso
UPDATE y DELETE en las tablas subordinadas)

Al hacer click en los check boxes se alternará entre tres posibles estados:

Permiso por defecto: (check box en blanco) Se aplica el permiso por defecto que viene
determinado por las funciones del servidor y de la base de datos.

Permiso concedido: (check box con una marca de chequeo verde) Se concede el permiso
para realizar la operación en la tabla.

Permiso denegado: (check box con una X roja) No se permite realizar la operación en
la tabla.

Además, es posible establecer permisos a nivel de columna en las tablas. Para ello de-
bemos situarnos en la fila correspondiente a la tabla cuyos permisos queremos modificar
y pulsar el botón Columnas. . . . Esto nos muestra la ventana de permisos de columnas
(ver figura 4.6), donde podremos indicar por cada campo (columna) de la tabla si se
pueden realizar consultas SELECT o UPDATE sobre dicho campo. El significado de los
check boxes es el mismo que en la ventana anterior.

Como fijar los permisos de una tabla


Para fijar los permisos de una tabla debemos seleccionar la tabla y, a través del menú de
contexto o del menú Acción, seleccionar la opción Propiedades. Esto nos muestra la
ventana de propiedades de la tabla, donde debemos pulsar el botón Permisos. . . . Esto
nos muestra la ventana de permisos de la tabla (ver figura 4.5). Esta ventana es similar
a la vista anteriormente (ver figura 4.5), salvo que en vez de mostrar los permisos de
todas las tablas (para un usuario dado) muestra los permisos de todos los usuarios (para
una tabla dada).

SQL Server 2000. Apuntes. 31


4. Seguridad

' $

Figura 4.6.: Permisos a nivel de columna.


& %

32 SQL Server 2000. Apuntes.


APÉNDICE A

Tipos de Datos de SQL Server

bigint Datos enteros (números enteros) comprendidos entre −263 (-9223372036854775808)


y 263 − 1 (9223372036854775807).

binary Datos binarios de longitud fija con una longitud máxima de 8.000 bytes.

bit Datos enteros con valor 1 ó 0.

char Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000
caracteres.

datetine Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de


diciembre de 9999, con una precisión de 3,33 milisegundos.

decimal Datos de precisión y escala numérica fijas comprendidos entre −1038 + 1 y


1038 –1.

float Números con precisión de coma flotante comprendidos entre -1,79E + 308 y 1,79E
+ 308.

image Datos binarios de longitud variable con una longitud máxima de 231 −1 (2.147.483.647)
bytes.

int Datos enteros (números enteros) comprendidos entre −231 (-2.147.483.648) y 231 −1
(2.147.483.647).

money Valores de moneda comprendidos entre −263 (-922.337.203.685.477,5808) y 263 −1


(+922.337.203.685.477,5807), con una precisión de una diezmilésima de la unidad
monetaria.

nchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres.

ntext Datos Unicode de longitud variable con una longitud máxima de 230 −1 (1.073.741.823)
caracteres.

numeric Funcionalmente equivalente a decimal.

33
A. Tipos de Datos de SQL Server

nvarchar Datos Unicode de longitud variable con una longitud máxima de 4.000 ca-
racteres. sysname es el tipo de datos suministrado por el sistema y definido por el
usuario que es funcionalmente equivalente a nvarchar(128) y que se utiliza para
hacer referencia a nombres de objetos de bases de datos.

real Números con precisión de coma flotante comprendidos entre -3,40E + 38 y 3,40E
+ 38.

smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6


de junio de 2079, con una precisión de un minuto.

smallint Datos enteros comprendidos entre 215 (-32.768) y 215 − 1 (32.767).

smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con


una precisión de una diezmilésima de la unidad monetaria.

sql variant Un tipo de datos que almacena valores de varios tipos de datos aceptados
en SQL Server, excepto text, ntext, timestamp y sql variant.

text Datos no Unicode de longitud variable con una longitud máxima de 231 − 1
(2.147.483.647) caracteres.

timestamp Un número único para toda la base de datos que se actualiza cada vez que
se actualiza una fila.

tinyint Datos enteros comprendidos 0 y 255.

uniqueidentifier Un identificador exclusivo global (GUID).

varbinary Datos binarios de longitud variable con una longitud máxima de 8.000 bytes.

varchar Datos no Unicode de longitud variable con un máximo de 8.000 caracteres.

34 SQL Server 2000. Apuntes.


APÉNDICE B

Conexión a SQL Server desde un ASP

Para acceder desde un ASP a una base de datos SQL Server no es necesario utilizar de
manera distinta los objetos ADODB (Connection, Command, Recordset, etc.). Simple-
mente hay que utilizar un ConnectionString especifico para el SQL Server.

Utilizando ODBC
Si queremos conectarnos utilizando un driver ODBC, el ConnectionString tendrá el
siguiente formato:

DRIVER={SQL Server}; SERVER=dirección servidor ; DATABASE=base datos;


UID=usuario; PWD=contraseña

dirección servidor es el nombre del servidor (o su dirección IP) o localhost si estamos


trabajando en local.

bases datos es el nombre de la base de datos a la que nos queremos conectar.

usuario es el nombre del inicio de sesión con el que nos vamos a conectar al servidor.

contraseña es la contraseña de usuario.

Si hemos creado inicios de sesión basándonos en las cuentas de Windows, y el usuario


accede al ASP utilizando una cuenta de Windows (acceso no anónimo y autenticado al
servidor web), entonces el IIS puede pasarle al SQL los datos del usuario si omitimos los
parámetros UID y PWD. Evidentemente, la cuenta de Windows debe tener acceso tanto
al ASP como a la base de datos.
También es posible acceder al SQL Server utilizando ODBC a través de una DSN.
En tal caso, basta con crear la DSN en el Panel de Control de Windows, y utilizar el
siguiente ConnectionString:

DSN=nombre DSN

nombre DSN es el nombre de la DSN.

35
B. Conexión a SQL Server desde un ASP

Utilizando OLE DB
Para acceder desde un ASP a un SQL Server es preferible hacerlo a través de OLE
DB, en lugar de ODBC, ya que es mucho más rápido y eficiente. En este caso, el
ConnectionString tendrá el siguiente formato:

Provider=SQLOLEDB; Server=dirección servidor ; Database=base datos; User ID=usuario;


Password=contraseña;

dirección servidor es el nombre del servidor (o su dirección IP) o localhost si estamos


trabajando en local.

base datos es el nombre de la base de datos a la que nos queremos conectar.

usuario es el nombre del inicio de sesión con el que nos vamos a conectar al servidor.

contraseña es la contraseña de usuario.

De nuevo, es posible utilizar la autenticación de Windows si se omiten los parámetros


User ID y Password.

36 SQL Server 2000. Apuntes.

También podría gustarte