Vous êtes sur la page 1sur 19

IV.

Seguridad
Objetivo: Administra el acceso a los diferentes recursos de

la base de datos

4.1. Tipos de usuarios


El objetivo de la creacin de usuarios es establecer una cuenta segura y til, que
tenga los privilegios adecuados y los valores por defecto apropiados

Para acceder a los datos en una BD Oracle, se debe tener acceso a una cuenta en
esa BD. Cada cuenta debe tener una palabra clave o password asociada. Una
cuenta en una BD puede estar ligada con una cuenta de sistema operativo. Los
passwords son fijados cuando se crea un usuario y pueden ser alterados por el DBA
o por el usuario mismo. La BD almacena una versin encriptada del password en
una tabla del diccionario llamada dba_users. Si la cuenta en la BD est asociada a
una cuenta del sistema operativo puede evitarse la comprobacin del password,
dndose por vlida la comprobacin de la identidad del usuario realizada por el SO.

Un usuario Oracle tiene las siguientes caractersticas

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que


inicie con una letra.

Un mtodo de autentificacin, el ms comn es un password pero Oracle 10G


soporta otros mtodos como biometric, certificado y autentificacion por medio de
token.

Un tablespace de default, el cul es donde el usuario va a poder crear sus objetos


por defecto. Ojo, no porque tenga un tablespace de default va a significar que puede
crear objetos, o una quota de espacio. Estos permisos se asignan de forma
separada.

Un tablespace temporal, donde el usuario pueda crear sus objetos temporales y


hacer ordenar las consultas.

Un perfil de usuario, es decir las restricciones o privilegios de su cuenta.

Una cuenta MySQL se define en trminos de un nombre de usuario y el equipo o


equipos desde los que el usuario puede conectar al servidor. La cuenta tambin
tiene una contrasea (deseable). Los nombres de usuario y contraseas en MySQL
no estn relacionadas con los del sistema operativo.

Nombre de usuarios en MySQL pueden tener como mximo 16 caracteres de


longitud

La contrasea es segura incluso si los paquetes TCP/IP pasan por un sniffer o la


base de datos mysql se captura.

4.2. Creacin de usuarios


CREATE USER: Crear un usuario oracle.
Un usuario es un nombre de acceso a la base de datos oracle asociado a una clave
(password).

Lo que puede hacer un usuario logeado a la base de datos depende de los permisos
que tenga asignados ya sea directamente (GRANT) como sobre algn rol que tenga
asignado (CREATE ROLE).

El perfil que tenga asignado influye en los recursos del sistema de los que dispone
un usuario a la hora de ejecutar Oracle (CREATE PROFILE).

CREATE USER usuarioLimitado


IDENTIFIED BY miClaveSecreta;
CREATE USER usuarioLimitado2
IDENTIFIED BY miClaveSecreta
PASSWORD EXPIRE;
CREATE USER usuarioLimitado
IDENTIFIED BY 'miClaveSecreta';

SELECT

* FROM dba_users;

USE mysql;
SELECT host, user, password
FROM user;

Borrar usuarios
Tanto Oracle como MySQL permiten eliminar usuarios mediante la sentencia DROP
USER, con una sintaxis similar

DROP USER usuarioLimitado CASCADE;


CASCADE borra todos los objetos del esquema del usuario Oracle antes de borrar
el usuario. Si el esquema contiene tablas, Oracle borrar todos las tablas y
automticamente eliminar cualquier restriccin de integridad referencial referida a
claves primarias o nicas en otros esquemas

MySQL realiza la misma actividad mediante la combinacin de sentencias REVOKE


y DROP.

REVOKE ALL PRIVILEGES, GRANT OPTION FROM usuario;

DROP USER usuario;


Comando GRANT
Se utiliza para crear usuarios y concederle privilegios. La sintaxis general del
comando GRANT es la siguiente:
GRANT privilegios (columnas)
ON elemento
TO nombre_usuario IDENTIFIED BY 'contrasea'
(whith grant option);
Lo que est dentro de los parntesis son opcionales, y los parntesis no hay que
ponerlos.

Es importantsimo que al final poner el ';' despus de poner cada lnea pulsar 'intro',
pues si hay algn error mysql nos indicar en que lnea est el error.

4.3. Privilegios de usuarios


Una vez creados los usuarios ser necesario dotarlos de privilegios para que
puedan realizar operaciones especficas en la base de datos. Estos privilegios
suelen clasificarse en privilegios del sistema (operaciones que afectan a todo el
sistema) y privilegios de objeto (tablas, vistas, etc.). Para conocer los privilegios y
su sintaxis es necesario consultar los manuales de referencia de su SGBD.

SELECT * FROM system_privilege_map;


Las sentencias GRANT y REVOKE permiten a los administradores de SGBD crear
cuentas de usuario, conceder y revocar derechos de esas cuentas.

GRANT CONNECT, RESOURCE, CREATE TABLE


TO usuarioLimitado;
La informacin sobre cuentas MySQL se almacena en las tablas de la base de datos
mysql. Los privilegios pueden ser concedidos en varios niveles:

Nivel global

Los privilegios globales se aplican a todas las bases de datos de un servidor dado.
Estos privilegios se almacenan en la tabla mysql.user.
GRANT ALL ON *.* y REVOKE ALL ON *.*
Conceden y revocan slo privilegios globales.

Nivel de base de datos

Los privilegios de base de datos se aplican a todos los objetos en una base de datos
dada. Estos privilegios se almacenan en las tablas mysql.dby mysql.host.
GRANT ALL ON db_name.* y REVOKE ALL ON db_name.*
Otorgan y revocan slo privilegios de base de datos.

Nivel de tabla

Los privilegios de tabla se aplican a todas las columnas de una tabla dada. Estos
privilegios se almacenan en la tabla mysql.tables_priv.
GRANT ALL ON db_name.tbl_name y REVOKE ALL ON db_name.tbl_name
Conceden y revocan nicamente privilegios de tabla.

Nivel de columna

Los privilegios de columna se aplican a una columna individual en una tabla dada.
Estos privilegios se almacenan en la tabla mysql.columns_priv. Cuando se usa
REVOKE, se deben especificar las mismas columnas que cuando se concedieron
los privilegios.

Nivel de procedimiento

Los privilegios CREATE ROUTINE, ALTER ROUTINE, EXECUTE y GRANT se


aplican a procedimientos almacenados. Pueden ser concedidos en el nivel global y
de base de datos. Adems, excepto para CREATE ROUTINE, estos privilegios
pueden ser concedidos en el nivel de procedimiento para procedimientos

individuales y se almacenan en la tabla mysql.procs_priv. Para hacer ms sencillo


revocar todos los privilegios, MySQL aadido la siguiente sintaxis, que elimina todos
los privilegios de los niveles de global, de base de datos, tabla y columna para los
usuarios nombrados:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM usuario [, usuario] ...
Asignar todos los privilegios menos los GRANT OPTION

GRANT ALL ON *.* TO miUsuario


Mostrar los privilegios del usuario

4.4. Roles
Un rol es una coleccin de privilegios del sistema y de objetos que se otorgan a
usuarios y a otras tareas. Oracle dispone de muchos roles predeterminados
mientras que MySQL no los soporta.
El rol CONNECECT permite al usuario conectarse a la base de datos, crear tablas,
vistas, secuencias, sinnimos y otros objetos en el esquema asociado.
El rol RESOURCE permite al usuario utilizar los recursos tpicos para la
programacin de aplicaciones (clusters, disparadores, paquetes, funciones, etc.)

El rol DBA, tpico de los administradores, permite al usuario realizar cualquier


funcin de base de datos y disponer de cualquier privilegio

La sentencia que permite crear roles es CREATE ROL. Su sintaxis es la siguiente

CREATE ROLE rol

[ NOT IDENTIFIED
| IDENTIFIED {BY password | USING [usuario.] paquete
| EXTERNALLY | GLOBALLY }
];

NOT IDENTIFIED indica que no se requiere contrasea para utilizar el rol,


INDENTIFIED BY password indica que se requiere la contrasea especificada.
EXTERNALLY crea un rol de usuario externo y GLOBALLY crea un rol de usuario
global.

Ejemplo: Crear un rol y asignarle privilegios

CREATE ROLE miPrimerRole;


GRANT SELECT, INSERT, UPDATE, DELETE ON tabla
TO miPrimerRole;
Ejemplo: Crear un rol y asignarle todos los privilegios

CREATE ROLE miPrimerRole;


GRANT all ON tabla
TO miPrimerROLE;
Ejemplo: Asignar un rol a un usuario

GRANT miPrimerRole TO miUsuario;


Ejemplo: Eliminar un rol

DROP ROLE miPrimerRole;

4.5. Vistas
Una vista es una tabla virtual cuyo contenido est definido por una consulta..
Una vista es sencillamente un objeto de base de datos que presenta datos de tablas.
Se trata de una consulta SQL que est permanentemente almacenada en la Base
de datos y a la que se le asigna un nombre, de modo que los resultados de la

consulta almacenada son visibles a travs de la vista, y SQL permite acceder a


estos resultados como si fueran de hecho una tabla real en la base de datos.

Las tablas y las vistas comparten el mismo espacio de nombres en la base de datos,
por lo tanto, una base de datos no puede contener una tabla y una vista con el
mismo nombre.

Las vistas suelen utilizarse para centrar, simplificar y personalizar la percepcin de


la base de datos para cada usuario. Las vistas pueden emplearse como
mecanismos de seguridad, que permiten a los usuarios obtener acceso a los datos
por medio de la vista, pero no les conceden el permiso de obtener acceso directo a
las tablas subyacentes de la vista. Las vistas se pueden utilizar para realizar
particiones de datos y para mejorar el rendimiento cuando se copian, se importan y
se exportan datos.

Mediante vistas es posible presentar datos de distintos servidores. Por ejemplo,


para combinar datos de distintos servidores remotos o en un servidor de mltiples
procesadores, cada uno de los cuales almacenan datos para una regin distinta de
su organizacin, puede crear consultas distribuidas o paralelas aumentando la
eficiencia de las consultas.
Mediante diversas clusulas es factible crear, modificar, eliminar y administrar
vistas. La sintaxis bsica para estas clusulas es genrica entre diversos gestores
de base de datos. Sin embargo en lo particular cada gestor implementa la
administracin de estas de forma diferente. En este documento se presenta la
sintaxis particular de Oracle 10g, comparando en forma genrica con MySQL 5.
La sintaxis bsica de una vista (Oracle y MySQL) es:

CREATE VIEW nombre_vista AS consulta;


Sintaxis CREATE VIEW

CREATE [OR REPLACE]


VIEW nombre_vista
AS sentencia_select
[WITH [CASCADED | LOCAL] CHECK OPTION]
WITH READ ONLY;

CREATE [OR REPLACE]


[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW nombre_vista [(columnas)]
AS sentencia_select
[WITH [CASCADED | LOCAL] CHECK OPTION]
Ejemplo: Paises del continente Americano

CREATE DATABASE Paises;


USE Paises;
CREATE TABLE pais (
id smallint(3) unsigned zerofill NOT NULL,
iso2 char(2) COLLATE utf8_unicode_ci NOT NULL,
iso3 char(3) COLLATE utf8_unicode_ci NOT NULL,
prefijo smallint(5) unsigned NOT NULL,
nombre varchar(100) COLLATE utf8_unicode_ci NOT NULL,
continente varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
subcontinente varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
iso_moneda varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
nombre_moneda varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY iso2 (iso2),
UNIQUE KEY iso3 (iso3)
);
INSERT INTO pais (id, iso2, iso3, prefijo, nombre, continente, subcontinente, iso_moneda,
nombre_moneda) VALUES
(004, 'AF', 'AFG', 93, 'Afganistn', 'Asia', NULL, 'AFN', 'Afgani afgano'),
(008, 'AL', 'ALB', 355, 'Albania', 'Europa', NULL, 'ALL', 'Lek albans'),
(010, 'AQ', 'ATA', 672, 'Antrtida', 'Antrtida', NULL, NULL, NULL),
(012, 'DZ', 'DZA', 213, 'Argelia', 'frica', NULL, 'DZD', 'Dinar algerino'),
(016, 'AS', 'ASM', 1684, 'Samoa Americana', 'Oceana', NULL, NULL, NULL),
(020, 'AD', 'AND', 376, 'Andorra', 'Europa', NULL, 'EUR', 'Euro'),
(024, 'AO', 'AGO', 244, 'Angola', 'frica', NULL, 'AOA', 'Kwanza angoleo'),
(028, 'AG', 'ATG', 1268, 'Antigua y Barbuda', 'Amrica', 'El Caribe', NULL, NULL),
(031, 'AZ', 'AZE', 994, 'Azerbaiyn', 'Asia', NULL, 'AZM', 'Manat azerbaiyano'),
(032, 'AR', 'ARG', 54, 'Argentina', 'Amrica', 'Amrica del Sur', 'ARS', 'Peso argentino'),
(036, 'AU', 'AUS', 61, 'Australia', 'Oceana', NULL, 'AUD', 'Dlar australiano'),

(040, 'AT', 'AUT', 43, 'Austria', 'Europa', NULL, 'EUR', 'Euro'),


(044, 'BS', 'BHS', 1242, 'Bahamas', 'Amrica', 'El Caribe', 'BSD', 'Dlar bahameo'),
(048, 'BH', 'BHR', 973, 'Bahrin', 'Asia', NULL, 'BHD', 'Dinar bahrein'),
(050, 'BD', 'BGD', 880, 'Bangladesh', 'Asia', NULL, 'BDT', 'Taka de Bangladesh'),
(051, 'AM', 'ARM', 374, 'Armenia', 'Asia', NULL, 'AMD', 'Dram armenio'),
(052, 'BB', 'BRB', 1246, 'Barbados', 'Amrica', 'El Caribe', 'BBD', 'Dlar de Barbados'),
(056, 'BE', 'BEL', 32, 'Blgica', 'Europa', NULL, 'EUR', 'Euro'),
(060, 'BM', 'BMU', 1441, 'Bermudas', 'Amrica', 'El Caribe', 'BMD', 'Dlar de Bermuda'),
(064, 'BT', 'BTN', 975, 'Bhutn', 'Asia', NULL, 'BTN', 'Ngultrum de Butn'),
(068, 'BO', 'BOL', 591, 'Bolivia', 'Amrica', 'Amrica del Sur', 'BOB', 'Boliviano'),
(070, 'BA', 'BIH', 387, 'Bosnia y Herzegovina', 'Europa', NULL, 'BAM', 'Marco convertible
de Bosnia-Herzegovina'),
(072, 'BW', 'BWA', 267, 'Botsuana', 'frica', NULL, 'BWP', 'Pula de Botsuana'),
(074, 'BV', 'BVT', 0, 'Isla Bouvet', NULL, NULL, NULL, NULL),
(076, 'BR', 'BRA', 55, 'Brasil', 'Amrica', 'Amrica del Sur', 'BRL', 'Real brasileo'),
(084, 'BZ', 'BLZ', 501, 'Belice', 'Amrica', 'Amrica Central', 'BZD', 'Dlar de Belice'),
(086, 'IO', 'IOT', 0, 'Territorio Britnico del Ocano ndico', NULL, NULL, NULL, NULL),
(090, 'SB', 'SLB', 677, 'Islas Salomn', 'Oceana', NULL, 'SBD', 'Dlar de las Islas
Salomn'),
(092, 'VG', 'VGB', 1284, 'Islas Vrgenes Britnicas', 'Amrica', 'El Caribe', NULL, NULL),
(096, 'BN', 'BRN', 673, 'Bruni', 'Asia', NULL, 'BND', 'Dlar de Bruni'),
(100, 'BG', 'BGR', 359, 'Bulgaria', 'Europa', NULL, 'BGN', 'Lev blgaro'),
(104, 'MM', 'MMR', 95, 'Myanmar', 'Asia', NULL, 'MMK', 'Kyat birmano'),
(108, 'BI', 'BDI', 257, 'Burundi', 'frica', NULL, 'BIF', 'Franco burunds'),
(112, 'BY', 'BLR', 375, 'Bielorrusia', 'Europa', NULL, 'BYR', 'Rublo bielorruso'),
(116, 'KH', 'KHM', 855, 'Camboya', 'Asia', NULL, 'KHR', 'Riel camboyano'),
(120, 'CM', 'CMR', 237, 'Camern', 'frica', NULL, NULL, NULL),
(124, 'CA', 'CAN', 1, 'Canad', 'Amrica', 'Amrica del Norte', 'CAD', 'Dlar canadiense'),
(132, 'CV', 'CPV', 238, 'Cabo Verde', 'frica', NULL, 'CVE', 'Escudo caboverdiano'),
(136, 'KY', 'CYM', 1345, 'Islas Caimn', 'Amrica', 'El Caribe', 'KYD', 'Dlar caimano (de
Islas Caimn)'),
(140, 'CF', 'CAF', 236, 'Repblica Centroafricana', 'frica', NULL, NULL, NULL),
(144, 'LK', 'LKA', 94, 'Sri Lanka', 'Asia', NULL, 'LKR', 'Rupia de Sri Lanka'),
(148, 'TD', 'TCD', 235, 'Chad', 'frica', NULL, NULL, NULL),
(152, 'CL', 'CHL', 56, 'Chile', 'Amrica', 'Amrica del Sur', 'CLP', 'Peso chileno'),
(156, 'CN', 'CHN', 86, 'China', 'Asia', NULL, 'CNY', 'Yuan Renminbi de China'),
(158, 'TW', 'TWN', 886, 'Taiwn', 'Asia', NULL, 'TWD', 'Dlar taiwans'),
(162, 'CX', 'CXR', 61, 'Isla de Navidad', 'Oceana', NULL, NULL, NULL),
(166, 'CC', 'CCK', 61, 'Islas Cocos', 'ceana', NULL, NULL, NULL),
(170, 'CO', 'COL', 57, 'Colombia', 'Amrica', 'Amrica del Sur', 'COP', 'Peso colombiano'),
(174, 'KM', 'COM', 269, 'Comoras', 'frica', NULL, 'KMF', 'Franco comoriano (de
Comoras)'),
(175, 'YT', 'MYT', 262, 'Mayotte', 'frica', NULL, NULL, NULL),
(178, 'CG', 'COG', 242, 'Congo', 'frica', NULL, NULL, NULL),
(180, 'CD', 'COD', 243, 'Repblica Democrtica del Congo', 'frica', NULL, 'CDF', 'Franco
congoleo'),
(184, 'CK', 'COK', 682, 'Islas Cook', 'Oceana', NULL, NULL, NULL),

(188, 'CR', 'CRI', 506, 'Costa Rica', 'Amrica', 'Amrica Central', 'CRC', 'Coln
costarricense'),
(191, 'HR', 'HRV', 385, 'Croacia', 'Europa', NULL, 'HRK', 'Kuna croata'),
(192, 'CU', 'CUB', 53, 'Cuba', 'Amrica', 'El Caribe', 'CUP', 'Peso cubano'),
(196, 'CY', 'CYP', 357, 'Chipre', 'Europa', NULL, 'CYP', 'Libra chipriota'),
(203, 'CZ', 'CZE', 420, 'Repblica Checa', 'Europa', NULL, 'CZK', 'Koruna checa'),
(204, 'BJ', 'BEN', 229, 'Benn', 'frica', NULL, NULL, NULL),
(208, 'DK', 'DNK', 45, 'Dinamarca', 'Europa', NULL, 'DKK', 'Corona danesa'),
(212, 'DM', 'DMA', 1767, 'Dominica', 'Amrica', 'El Caribe', NULL, NULL),
(214, 'DO', 'DOM', 1809, 'Repblica Dominicana', 'Amrica', 'El Caribe', 'DOP', 'Peso
dominicano'),
(218, 'EC', 'ECU', 593, 'Ecuador', 'Amrica', 'Amrica del Sur', NULL, NULL),
(222, 'SV', 'SLV', 503, 'El Salvador', 'Amrica', 'Amrica Central', 'SVC', 'Coln
salvadoreo'),
(226, 'GQ', 'GNQ', 240, 'Guinea Ecuatorial', 'frica', NULL, NULL, NULL),
(231, 'ET', 'ETH', 251, 'Etiopa', 'frica', NULL, 'ETB', 'Birr etope'),
(232, 'ER', 'ERI', 291, 'Eritrea', 'frica', NULL, 'ERN', 'Nakfa eritreo'),
(233, 'EE', 'EST', 372, 'Estonia', 'Europa', NULL, 'EEK', 'Corona estonia'),
(234, 'FO', 'FRO', 298, 'Islas Feroe', 'Europa', NULL, NULL, NULL),
(238, 'FK', 'FLK', 500, 'Islas Malvinas', 'Amrica', 'Amrica del Sur', 'FKP', 'Libra
malvinense'),
(239, 'GS', 'SGS', 0, 'Islas Georgias del Sur y Sandwich del Sur', 'Amrica', 'Amrica del
Sur', NULL, NULL),
(242, 'FJ', 'FJI', 679, 'Fiyi', 'Oceana', NULL, 'FJD', 'Dlar fijiano'),
(246, 'FI', 'FIN', 358, 'Finlandia', 'Europa', NULL, 'EUR', 'Euro'),
(248, 'AX', 'ALA', 0, 'Islas Gland', 'Europa', NULL, NULL, NULL),
(250, 'FR', 'FRA', 33, 'Francia', 'Europa', NULL, 'EUR', 'Euro'),
(254, 'GF', 'GUF', 0, 'Guayana Francesa', 'Amrica', 'Amrica del Sur', NULL, NULL),
(258, 'PF', 'PYF', 689, 'Polinesia Francesa', 'Oceana', NULL, NULL, NULL),
(260, 'TF', 'ATF', 0, 'Territorios Australes Franceses', NULL, NULL, NULL, NULL),
(262, 'DJ', 'DJI', 253, 'Yibuti', 'frica', NULL, 'DJF', 'Franco yibutiano'),
(266, 'GA', 'GAB', 241, 'Gabn', 'frica', NULL, NULL, NULL),
(268, 'GE', 'GEO', 995, 'Georgia', 'Europa', NULL, 'GEL', 'Lari georgiano'),
(270, 'GM', 'GMB', 220, 'Gambia', 'frica', NULL, 'GMD', 'Dalasi gambiano'),
(275, 'PS', 'PSE', 0, 'Palestina', 'Asia', NULL, NULL, NULL),
(276, 'DE', 'DEU', 49, 'Alemania', 'Europa', NULL, 'EUR', 'Euro'),
(288, 'GH', 'GHA', 233, 'Ghana', 'frica', NULL, 'GHC', 'Cedi ghans'),
(292, 'GI', 'GIB', 350, 'Gibraltar', 'Europa', NULL, 'GIP', 'Libra de Gibraltar'),
(296, 'KI', 'KIR', 686, 'Kiribati', 'Oceana', NULL, NULL, NULL),
(300, 'GR', 'GRC', 30, 'Grecia', 'Europa', NULL, 'EUR', 'Euro'),
(304, 'GL', 'GRL', 299, 'Groenlandia', 'Amrica', 'Amrica del Norte', NULL, NULL),
(308, 'GD', 'GRD', 1473, 'Granada', 'Amrica', 'El Caribe', NULL, NULL),
(312, 'GP', 'GLP', 0, 'Guadalupe', 'Amrica', 'El Caribe', NULL, NULL),
(316, 'GU', 'GUM', 1671, 'Guam', 'Oceana', NULL, NULL, NULL),
(320, 'GT', 'GTM', 502, 'Guatemala', 'Amrica', 'Amrica Central', 'GTQ', 'Quetzal
guatemalteco'),
(324, 'GN', 'GIN', 224, 'Guinea', 'frica', NULL, 'GNF', 'Franco guineano'),

(328, 'GY', 'GUY', 592, 'Guyana', 'Amrica', 'Amrica del Sur', 'GYD', 'Dlar guyans'),
(332, 'HT', 'HTI', 509, 'Hait', 'Amrica', 'El Caribe', 'HTG', 'Gourde haitiano'),
(334, 'HM', 'HMD', 0, 'Islas Heard y McDonald', 'Oceana', NULL, NULL, NULL),
(336, 'VA', 'VAT', 39, 'Ciudad del Vaticano', 'Europa', NULL, NULL, NULL),
(340, 'HN', 'HND', 504, 'Honduras', 'Amrica', 'Amrica Central', 'HNL', 'Lempira
hondureo'),
(344, 'HK', 'HKG', 852, 'Hong Kong', 'Asia', NULL, 'HKD', 'Dlar de Hong Kong'),
(348, 'HU', 'HUN', 36, 'Hungra', 'Europa', NULL, 'HUF', 'Forint hngaro'),
(352, 'IS', 'ISL', 354, 'Islandia', 'Europa', NULL, 'ISK', 'Krna islandesa'),
(356, 'IN', 'IND', 91, 'India', 'Asia', NULL, 'INR', 'Rupia india'),
(360, 'ID', 'IDN', 62, 'Indonesia', 'Asia', NULL, 'IDR', 'Rupiah indonesia'),
(364, 'IR', 'IRN', 98, 'Irn', 'Asia', NULL, 'IRR', 'Rial iran'),
(368, 'IQ', 'IRQ', 964, 'Iraq', 'Asia', NULL, 'IQD', 'Dinar iraqu'),
(372, 'IE', 'IRL', 353, 'Irlanda', 'Europa', NULL, 'EUR', 'Euro'),
(376, 'IL', 'ISR', 972, 'Israel', 'Asia', NULL, 'ILS', 'Nuevo shquel israel'),
(380, 'IT', 'ITA', 39, 'Italia', 'Europa', NULL, 'EUR', 'Euro'),
(384, 'CI', 'CIV', 225, 'Costa de Marfil', 'frica', NULL, NULL, NULL),
(388, 'JM', 'JAM', 1876, 'Jamaica', 'Amrica', 'El Caribe', 'JMD', 'Dlar jamaicano'),
(392, 'JP', 'JPN', 81, 'Japn', 'Asia', NULL, 'JPY', 'Yen japons'),
(398, 'KZ', 'KAZ', 7, 'Kazajstn', 'Asia', NULL, 'KZT', 'Tenge kazajo'),
(400, 'JO', 'JOR', 962, 'Jordania', 'Asia', NULL, 'JOD', 'Dinar jordano'),
(404, 'KE', 'KEN', 254, 'Kenia', 'frica', NULL, 'KES', 'Cheln keniata'),
(408, 'KP', 'PRK', 850, 'Corea del Norte', 'Asia', NULL, 'KPW', 'Won norcoreano'),
(410, 'KR', 'KOR', 82, 'Corea del Sur', 'Asia', NULL, 'KRW', 'Won surcoreano'),
(414, 'KW', 'KWT', 965, 'Kuwait', 'Asia', NULL, 'KWD', 'Dinar kuwait'),
(417, 'KG', 'KGZ', 996, 'Kirguistn', 'Asia', NULL, 'KGS', 'Som kirgus (de Kirguistn)'),
(418, 'LA', 'LAO', 856, 'Laos', 'Asia', NULL, 'LAK', 'Kip lao'),
(422, 'LB', 'LBN', 961, 'Lbano', 'Asia', NULL, 'LBP', 'Libra libanesa'),
(426, 'LS', 'LSO', 266, 'Lesotho', 'frica', NULL, 'LSL', 'Loti lesotense'),
(428, 'LV', 'LVA', 371, 'Letonia', 'Europa', NULL, 'LVL', 'Lat letn'),
(430, 'LR', 'LBR', 231, 'Liberia', 'frica', NULL, 'LRD', 'Dlar liberiano'),
(434, 'LY', 'LBY', 218, 'Libia', 'frica', NULL, 'LYD', 'Dinar libio'),
(438, 'LI', 'LIE', 423, 'Liechtenstein', 'Europa', NULL, NULL, NULL),
(440, 'LT', 'LTU', 370, 'Lituania', 'Europa', NULL, 'LTL', 'Litas lituano'),
(442, 'LU', 'LUX', 352, 'Luxemburgo', 'Europa', NULL, 'EUR', 'Euro'),
(446, 'MO', 'MAC', 853, 'Macao', 'Asia', NULL, 'MOP', 'Pataca de Macao'),
(450, 'MG', 'MDG', 261, 'Madagascar', 'frica', NULL, 'MGA', 'Ariary malgache'),
(454, 'MW', 'MWI', 265, 'Malaui', 'frica', NULL, 'MWK', 'Kwacha malauiano'),
(458, 'MY', 'MYS', 60, 'Malasia', 'Asia', NULL, 'MYR', 'Ringgit malayo'),
(462, 'MV', 'MDV', 960, 'Maldivas', 'Asia', NULL, 'MVR', 'Rufiyaa maldiva'),
(466, 'ML', 'MLI', 223, 'Mal', 'frica', NULL, NULL, NULL),
(470, 'MT', 'MLT', 356, 'Malta', 'Europa', NULL, 'MTL', 'Lira maltesa'),
(474, 'MQ', 'MTQ', 0, 'Martinica', 'Amrica', 'El Caribe', NULL, NULL),
(478, 'MR', 'MRT', 222, 'Mauritania', 'frica', NULL, 'MRO', 'Ouguiya mauritana'),
(480, 'MU', 'MUS', 230, 'Mauricio', 'frica', NULL, 'MUR', 'Rupia mauricia'),
(484, 'MX', 'MEX', 52, 'Mxico', 'Amrica', 'Amrica del Norte', 'MXN', 'Peso mexicano'),
(492, 'MC', 'MCO', 377, 'Mnaco', 'Europa', NULL, NULL, NULL),

(496, 'MN', 'MNG', 976, 'Mongolia', 'Asia', NULL, 'MNT', 'Tughrik mongol'),
(498, 'MD', 'MDA', 373, 'Moldavia', 'Europa', NULL, 'MDL', 'Leu moldavo'),
(499, 'ME', 'MNE', 382, 'Montenegro', 'Europa', NULL, NULL, NULL),
(500, 'MS', 'MSR', 1664, 'Montserrat', 'Amrica', 'El Caribe', NULL, NULL),
(504, 'MA', 'MAR', 212, 'Marruecos', 'frica', NULL, 'MAD', 'Dirham marroqu'),
(508, 'MZ', 'MOZ', 258, 'Mozambique', 'frica', NULL, 'MZM', 'Metical mozambiqueo'),
(512, 'OM', 'OMN', 968, 'Omn', 'Asia', NULL, 'OMR', 'Rial oman'),
(516, 'NA', 'NAM', 264, 'Namibia', 'frica', NULL, 'NAD', 'Dlar namibio'),
(520, 'NR', 'NRU', 674, 'Nauru', 'Oceana', NULL, NULL, NULL),
(524, 'NP', 'NPL', 977, 'Nepal', 'Asia', NULL, 'NPR', 'Rupia nepalesa'),
(528, 'NL', 'NLD', 31, 'Pases Bajos', 'Europa', NULL, 'EUR', 'Euro'),
(530, 'AN', 'ANT', 599, 'Antillas Holandesas', 'Amrica', 'El Caribe', 'ANG', 'Florn antillano
neerlands'),
(533, 'AW', 'ABW', 297, 'Aruba', 'Amrica', 'El Caribe', 'AWG', 'Florn arubeo'),
(540, 'NC', 'NCL', 687, 'Nueva Caledonia', 'Oceana', NULL, NULL, NULL),
(548, 'VU', 'VUT', 678, 'Vanuatu', 'Oceana', NULL, 'VUV', 'Vatu vanuatense'),
(554, 'NZ', 'NZL', 64, 'Nueva Zelanda', 'Oceana', NULL, 'NZD', 'Dlar neozelands'),
(558, 'NI', 'NIC', 505, 'Nicaragua', 'Amrica', 'Amrica Central', 'NIO', 'Crdoba
nicaragense'),
(562, 'NE', 'NER', 227, 'Nger', 'frica', NULL, NULL, NULL),
(566, 'NG', 'NGA', 234, 'Nigeria', 'frica', NULL, 'NGN', 'Naira nigeriana'),
(570, 'NU', 'NIU', 683, 'Niue', 'Oceana', NULL, NULL, NULL),
(574, 'NF', 'NFK', 0, 'Isla Norfolk', 'Oceana', NULL, NULL, NULL),
(578, 'NO', 'NOR', 47, 'Noruega', 'Europa', NULL, 'NOK', 'Corona noruega'),
(580, 'MP', 'MNP', 1670, 'Islas Marianas del Norte', 'Oceana', NULL, NULL, NULL),
(581, 'UM', 'UMI', 0, 'Islas Ultramarinas de Estados Unidos', NULL, NULL, NULL,
NULL),
(583, 'FM', 'FSM', 691, 'Micronesia', 'Oceana', NULL, NULL, NULL),
(584, 'MH', 'MHL', 692, 'Islas Marshall', 'Oceana', NULL, NULL, NULL),
(585, 'PW', 'PLW', 680, 'Palaos', 'Oceana', NULL, NULL, NULL),
(586, 'PK', 'PAK', 92, 'Pakistn', 'Asia', NULL, 'PKR', 'Rupia pakistan'),
(591, 'PA', 'PAN', 507, 'Panam', 'Amrica', 'Amrica Central', 'PAB', 'Balboa panamea'),
(598, 'PG', 'PNG', 675, 'Papa Nueva Guinea', 'Oceana', NULL, 'PGK', 'Kina de Papa
Nueva Guinea'),
(600, 'PY', 'PRY', 595, 'Paraguay', 'Amrica', 'Amrica del Sur', 'PYG', 'Guaran
paraguayo'),
(604, 'PE', 'PER', 51, 'Per', 'Amrica', 'Amrica del Sur', 'PEN', 'Nuevo sol peruano'),
(608, 'PH', 'PHL', 63, 'Filipinas', 'Asia', NULL, 'PHP', 'Peso filipino'),
(612, 'PN', 'PCN', 870, 'Islas Pitcairn', 'Oceana', NULL, NULL, NULL),
(616, 'PL', 'POL', 48, 'Polonia', 'Europa', NULL, 'PLN', 'zloty polaco'),
(620, 'PT', 'PRT', 351, 'Portugal', 'Europa', NULL, 'EUR', 'Euro'),
(624, 'GW', 'GNB', 245, 'Guinea-Bissau', 'frica', NULL, NULL, NULL),
(626, 'TL', 'TLS', 670, 'Timor Oriental', 'Asia', NULL, NULL, NULL),
(630, 'PR', 'PRI', 1, 'Puerto Rico', 'Amrica', 'El Caribe', NULL, NULL),
(634, 'QA', 'QAT', 974, 'Qatar', 'Asia', NULL, 'QAR', 'Rial qatar'),
(638, 'RE', 'REU', 262, 'Reunin', 'frica', NULL, NULL, NULL),
(642, 'RO', 'ROU', 40, 'Rumania', 'Europa', NULL, 'RON', 'Leu rumano'),

(643, 'RU', 'RUS', 7, 'Rusia', 'Asia', NULL, 'RUB', 'Rublo ruso'),


(646, 'RW', 'RWA', 250, 'Ruanda', 'frica', NULL, 'RWF', 'Franco ruands'),
(654, 'SH', 'SHN', 290, 'Santa Helena', 'frica', NULL, 'SHP', 'Libra de Santa Helena'),
(659, 'KN', 'KNA', 1869, 'San Cristbal y Nieves', 'Amrica', 'El Caribe', NULL, NULL),
(660, 'AI', 'AIA', 1264, 'Anguila', 'Amrica', 'El Caribe', NULL, NULL),
(662, 'LC', 'LCA', 1758, 'Santa Luca', 'Amrica', 'El Caribe', NULL, NULL),
(666, 'PM', 'SPM', 508, 'San Pedro y Miqueln', 'Amrica', 'Amrica del Norte', NULL,
NULL),
(670, 'VC', 'VCT', 1784, 'San Vicente y las Granadinas', 'Amrica', 'El Caribe', NULL,
NULL),
(674, 'SM', 'SMR', 378, 'San Marino', 'Europa', NULL, NULL, NULL),
(678, 'ST', 'STP', 239, 'Santo Tom y Prncipe', 'frica', NULL, 'STD', 'Dobra de Santo
Tom y Prncipe'),
(682, 'SA', 'SAU', 966, 'Arabia Saud', 'Asia', NULL, 'SAR', 'Riyal saud'),
(686, 'SN', 'SEN', 221, 'Senegal', 'frica', NULL, NULL, NULL),
(688, 'RS', 'SRB', 381, 'Serbia', 'Europa', NULL, NULL, NULL),
(690, 'SC', 'SYC', 248, 'Seychelles', 'frica', NULL, 'SCR', 'Rupia de Seychelles'),
(694, 'SL', 'SLE', 232, 'Sierra Leona', 'frica', NULL, 'SLL', 'Leone de Sierra Leona'),
(702, 'SG', 'SGP', 65, 'Singapur', 'Asia', NULL, 'SGD', 'Dlar de Singapur'),
(703, 'SK', 'SVK', 421, 'Eslovaquia', 'Europa', NULL, 'SKK', 'Corona eslovaca'),
(704, 'VN', 'VNM', 84, 'Vietnam', 'Asia', NULL, 'VND', 'Dong vietnamita'),
(705, 'SI', 'SVN', 386, 'Eslovenia', 'Europa', NULL, NULL, NULL),
(706, 'SO', 'SOM', 252, 'Somalia', 'frica', NULL, 'SOS', 'Cheln somal'),
(710, 'ZA', 'ZAF', 27, 'Sudfrica', 'frica', NULL, 'ZAR', 'Rand sudafricano'),
(716, 'ZW', 'ZWE', 263, 'Zimbabue', 'frica', NULL, 'ZWL', 'Dlar zimbabuense'),
(724, 'ES', 'ESP', 34, 'Espaa', 'Europa', NULL, 'EUR', 'Euro'),
(732, 'EH', 'ESH', 0, 'Sahara Occidental', 'frica', NULL, NULL, NULL),
(736, 'SD', 'SDN', 249, 'Sudn', 'frica', NULL, 'SDD', 'Dinar sudans'),
(740, 'SR', 'SUR', 597, 'Surinam', 'Amrica', 'Amrica del Sur', 'SRD', 'Dlar surinams'),
(744, 'SJ', 'SJM', 0, 'Svalbard y Jan Mayen', 'Europa', NULL, NULL, NULL),
(748, 'SZ', 'SWZ', 268, 'Suazilandia', 'frica', NULL, 'SZL', 'Lilangeni suazi'),
(752, 'SE', 'SWE', 46, 'Suecia', 'Europa', NULL, 'SEK', 'Corona sueca'),
(756, 'CH', 'CHE', 41, 'Suiza', 'Europa', NULL, 'CHF', 'Franco suizo'),
(760, 'SY', 'SYR', 963, 'Siria', 'Asia', NULL, 'SYP', 'Libra siria'),
(762, 'TJ', 'TJK', 992, 'Tayikistn', 'Asia', NULL, 'TJS', 'Somoni tayik (de Tayikistn)'),
(764, 'TH', 'THA', 66, 'Tailandia', 'Asia', NULL, 'THB', 'Baht tailands'),
(768, 'TG', 'TGO', 228, 'Togo', 'frica', NULL, NULL, NULL),
(772, 'TK', 'TKL', 690, 'Tokelau', 'Oceana', NULL, NULL, NULL),
(776, 'TO', 'TON', 676, 'Tonga', 'Oceana', NULL, 'TOP', 'Pa''anga tongano'),
(780, 'TT', 'TTO', 1868, 'Trinidad y Tobago', 'Amrica', 'El Caribe', 'TTD', 'Dlar de
Trinidad y Tobago'),
(784, 'AE', 'ARE', 971, 'Emiratos rabes Unidos', 'Asia', NULL, 'AED', 'Dirham de los
Emiratos rabes Unidos'),
(788, 'TN', 'TUN', 216, 'Tnez', 'frica', NULL, 'TND', 'Dinar tunecino'),
(792, 'TR', 'TUR', 90, 'Turqua', 'Asia', NULL, 'TRY', 'Lira turca'),
(795, 'TM', 'TKM', 993, 'Turkmenistn', 'Asia', NULL, 'TMM', 'Manat turcomano'),
(796, 'TC', 'TCA', 1649, 'Islas Turcas y Caicos', 'Amrica', 'El Caribe', NULL, NULL),

(798, 'TV', 'TUV', 688, 'Tuvalu', 'Oceana', NULL, NULL, NULL),


(800, 'UG', 'UGA', 256, 'Uganda', 'frica', NULL, 'UGX', 'Cheln ugands'),
(804, 'UA', 'UKR', 380, 'Ucrania', 'Europa', NULL, 'UAH', 'Grivna ucraniana'),
(807, 'MK', 'MKD', 389, 'Macedonia', 'Europa', NULL, 'MKD', 'Denar macedonio'),
(818, 'EG', 'EGY', 20, 'Egipto', 'frica', NULL, 'EGP', 'Libra egipcia'),
(826, 'GB', 'GBR', 44, 'Reino Unido', 'Europa', NULL, 'GBP', 'Libra esterlina (libra de Gran
Bretaa)'),
(834, 'TZ', 'TZA', 255, 'Tanzania', 'frica', NULL, 'TZS', 'Cheln tanzano'),
(840, 'US', 'USA', 1, 'Estados Unidos', 'Amrica', 'Amrica del Norte', 'USD', 'Dlar
estadounidense'),
(850, 'VI', 'VIR', 1340, 'Islas Vrgenes de los Estados Unidos', 'Amrica', 'El Caribe',
NULL, NULL),
(854, 'BF', 'BFA', 226, 'Burkina Faso', 'frica', NULL, NULL, NULL),
(858, 'UY', 'URY', 598, 'Uruguay', 'Amrica', 'Amrica del Sur', 'UYU', 'Peso uruguayo'),
(860, 'UZ', 'UZB', 998, 'Uzbekistn', 'Asia', NULL, 'UZS', 'Som uzbeko'),
(862, 'VE', 'VEN', 58, 'Venezuela', 'Amrica', 'Amrica del Sur', 'VEB', 'Bolvar
venezolano'),
(876, 'WF', 'WLF', 681, 'Wallis y Futuna', 'Oceana', NULL, NULL, NULL),
(882, 'WS', 'WSM', 685, 'Samoa', 'Oceana', NULL, 'WST', 'Tala samoana'),
(887, 'YE', 'YEM', 967, 'Yemen', 'Asia', NULL, 'YER', 'Rial yemen (de Yemen)'),
(894, 'ZM', 'ZMB', 260, 'Zambia', 'frica', NULL, 'ZMK', 'Kwacha zambiano');

CREATE OR REPLACE VIEW america AS


SELECT p.id, p.nombre, p.subcontinente,
p.nombre_moneda
FROM pais P
WHERE (p.continente = 'Amrica');
Ahora solo tenemos que hacer una consulta para obtener la vista correspondiente.

SELECT * FROM america;


Ejemplo: En el futbol se conoce como Caballo de Hierro a los deportistas que
jugaron los 90 minutos en todos los partidos de un campeonato. Y Considerando
que en el torneo de Apertura 2011 se disputaron 17 fechas en la fase regular. La
vista que define a estos futbolistas es la siguiente.

CREATE OR REPLACE VIEW caballoDeHierro AS


SELECT e.nombreEquipo, j.nombre, j.JJ
FROM equipo e, jugadores j

WHERE
AND
AND
ORDER

e.idEquipo = j.idEquipo
j.JJ >= 17 AND minutos >= (j.JJ * 90)
(j.JJ % 2 != 0)
BY j.minutos DESC, j.nombre;

Ahora solo tenemos que hacer una consulta para obtener la vista correspondiente.
SELECT * FROM caballoDeHierro;

Ejemplo. El cual modificar la vista caballo de hierro con los jugadores que no
recibieron amonestaciones.

CREATE OR REPLACE VIEW caballoDeHierro AS


SELECT nombrePosicion, e.nombreEquipo equipo, j.nombre,
j.JJ,j.ta
FROM equipo e, jugador j, posicion p
WHERE e.idEquipo = j.idEquipo
AND p.idPosicion = j.idPosicion
AND j.JJ >= 17 AND minutos >= (j.JJ * 90)
AND (j.JJ % 2 != 0) AND (j.ta = 0 )
ORDER BY nombre;
SELECT * FROM caballoDeHierro;

Actualizacin de vistas

Algunas vistas pueden actualizarse mediante sentencias INSERT, DELETE o


UPDATE sobre ellas, considerando las siguientes reglas:
No se debe especificar DISTINCT para que las filas duplicadas no se eliminen de
los resultados de las consultas.
La clusula FROM debe especificar slo una tabla actualizable.
Cada elemento de seleccin debe ser una referencia de columna simple (no puede
contener expresiones, columnas calculadas, ni funciones de columna).

La clusula WHERE no debe incluir una subconsulta.


La consulta no debe incluir una clusula GROUP BY o HAVING.
La consulta no debe incluir sentencias: UNION, UNION ALL, INTERSECT,

MINUS

Si una columna

NOT NULL no contiene un DEFAULT, no es posible insertar

mediante vistas

Para que la vista sea de solo lectura, usaremos la clusula WITH READ ONLY
(Oracle). Observe que esta opcin no soporta la clusula ORDER BY

La clusula CHECK OPTION evita que sean insertados o modificados registro


que no sean posteriormente incluidos en la vista mediante la sentencia WHERE.

Ejemplo: Poblacin por entidad federativa 2010 INEGI (INSTITUTO NACIONAL DE


ESTADISTICA, GEOGRAFIA E INFORMATICA). El ejemplo siguiente crea una
vista que usa la clusula CHECK OPTION donde seleccionan aquellas entidades
federativas que tienen menos de 2 millones de habitantes.

CREATE TABLE entidad (


estado
CHAR(30) NOT NULL,
poblacion NUMBER
NOT NULL
);

CREATE TABLE entidad (


estado
CHAR(30) NOT NULL,
poblacion INTEGER NOT NULL
) ENGINE = InnoDB;

INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO

entidad
entidad
entidad
entidad
entidad
entidad
entidad
entidad
entidad
entidad
entidad

values
values
values
values
values
values
values
values
values
values
values

('Estado de Mxico', 15175862);


('Distrito Federal',
8851080);
('Veracruz',
7643194);
('Jalisco',
7350682);
('Puebla',
5779829);
('Guanajuato',
5486372);
('Chiapas',
4796580);
('Nuevo Len',
4653458);
('Michoacn de Ocampo',4351037);
('Oaxaca',
3801962);
('Chihuahua',
3406465);

INSERT INTO entidad values ('Guerrero',

3388768);

CREATE OR REPLACE VIEW entidades AS


SELECT * FROM entidad
WHERE poblacion < 2000000
WITH CHECK OPTION;

Ahora considere la siguiente informacin. Para insertarla en la vista recin creada.


Entidad

Poblacin

Tamaulipas

3,268,554

Baja California

3,155,070

Sinaloa

2,767,761

Coahuila de Zaragoza

2,748,391

Hidalgo

2,665,018

Sonora

2,662,480

San Luis Potos

2,585,518

Tabasco

2,238,603

Yucatn

1,955,577

Quertaro

1,827,937

Morelos

1,777,227

Durango

1,632,934

Zacatecas

1,490,668

Quintana Roo

1,325,578

Aguascalientes

1,213,445

Tlaxcala

1,169,936

Nayarit

1,084,979

Campeche

822,441

Colima

650,555

Entidad
Baja California Sur

Poblacin
637,026

Con la clusula CHECK OPTION cada vez que se trata de hacer una violacin de
la condicin dentro del WHERE obtendremos un error ORA-01402. Que error le
regresa MySQL

Borrado de vistas con DROP VIEW


La sentencia DROP VIEW permite borrar una vista de la base de datos. Su
sintaxis se presenta a continuacin:

DROP VIEW [usuario.] nombre_vista [CASCADE CONSTRAINTS];

DROP VIEW [IF EXISTS]

nombre_vista;

Vous aimerez peut-être aussi