Создание базы данных

По умолчанию, если администратор не предпринимал специальных действий, базу данных может создать любой пользователь операционной системы. Этот пользователь становится владельцем этой базы (то есть получает в ней права администратора - DBA privilege) и может делать с ней все, что угодно. В примерах предполагается, что все действия выполняются от имени обычного пользователя операционной системы с именем dbuser, не имеющего в СУБД никаких особых прав.

Перед созданием базы убедитесь в том, что переменные окружения INFORMIXDIR и INFORMIXSERVER установлены правильно - то есть в том, что вы будете работать с нужным вам экземпляром СУБД.

Если создаете локализованную базу данных - с поддержкой данных на национальном языке - проверьте значения переменных окружения DB_LOCALE и CLIENT_LOCALE и установите их так, как вам нужно. Подробности о локализации см. на странице Informix GLS. Имейте в виду, что утилита dbaccess, с помощью которой вы выполняете запрос, является клиентом СУБД, а не ее частью, и на нее влияет значение переменной CLIENT_LOCALE, а не DB_LOCALE.

Создание новой базы выполняется с помощью запроса CREATE DATABASE, например:

	CREATE DATABASE newbase

Это самая простая форма запроса. Вы указываете только имя новой базы данных и ничего более. Такой запрос создаст базу

Более полный вариант:

	CREATE DATABASE newbase IN sp1 WITH LOG

Дополнительные параметры означают:

Выполнить запрос можно с помощью утилиты dbaccess:

	~dbuser > echo CREATE DATABASE newbase IN sp1 WITH LOG | dbaccess sysmaster
	~dbuser > 

С этого момента к базе данных можно подключаться и работать с хранящимися в ней данными.

Права доступа к базе данных

Создатель базы (в данном случае пользователь dbuser) имеет во вновь созданной базе права администратора - то есть полные права. Такие же права, независимо от желания создателя, имеет пользователь informix. Ни один другой пользователь пока что не имеет возможности даже подключиться к новой базе.

Вообще в Informix существует три уровня привилегий доступа к отдельной базе:

CONNECT
пользователь, которому дана привилегия CONNECT, может подключиться к базе и работать с теми данными (таблицами, процедурами), на которые ему предоставлены соответствующие права. Можно изменять данные в таблицах, но нельзя создавать, удалять или изменять структуру самих таблиц.
RESOURCE
обладает привилегией CONNECT и, кроме того, имеет право создавать новые объекты в базе данных от своего имени. Эти объекты буду принадлежать ему и находятся под его полным контролем. По отношению к объектам, принадлежащим другим пользователям, имеет только те права, которые предоставлены привилегией CONNECT.
DBA
полные права доступа, в том числе создание (модификация, удаление) объектов, принадлежащих другим пользователям, а также предоставление другим пользователям прав доступа к этой базе (или возможность отказать пользователю в таком праве).

Администратор базы данных (обладающий привилегией DBA) может распределять права доступа к этой базе с помощью запросов GRANT и REVOKE.

	~dbuser 1> echo GRANT CONNECT TO user1 | dbaccess newbase
	~dbuser 2> echo GRANT RESOURCE TO user2 | dbaccess newbase
	~dbuser 3> echo GRANT DBA TO user3 | dbaccess newbase
	~dbuser 4> 

В результате этих манипуляций пользователь user1 получит возможность подключиться к базе newbase. Пользователь user2 получит все права, которыми обладает user1, и, кроме того, ему будет разрешено создавать в базе свои собственные объекты. Пользователь user3 получит те же права, что и создатель базы.

Если пользователь user3 не оправдал доверия, можно лишить его привилегий администратора и оставить только право распоряжаться только его собственными объектами:

	~dbuser 501> echo REVOKE DBA FROM user3 | dbaccess newbase
	~dbuser 502> echo GRANT RESOURCE TO user3 | dbaccess newbase
	~dbuser 503> 

В Informix (как и в других СУБД) имеется еще один псевдопользователь с именем public. Назначение каких-либо прав этому пользователю означает предоставление соответствующих привилегий кому угодно. Разумеется, пользователь при подключении к базе должен каким-то образом авторизоваться, то есть учетная запись операционной системы все равно должна присутствовать.

	~dbuser 11> echo GRANT CONNECT TO public | dbaccess newbase
	~dbuser 12> 

После этого к базе сможет подключиться кто угодно.

Журналирование и поддержка транзакций

Опция способа поддержки транзакций в новой базе данных может быть указана как:

Основные отличия баз данных Informix и ANSI

В приведенном списке под объектами базы данных понимаются таблицы, представления, типы данных, хранимые процедуры, триггеры.

ХарактеристикаБД InformixБД ANSI
Неявные транзакции Любой запрос вне транзакции интерпретируется как неявная транзакция. Исполнение такого запроса подтверждается автоматически, если не обнаружено ошибок. Явный COMMIT не требуется. Любой запрос вне транзакции интерпретируется как начало неявной транзакции. Исполнение запроса или группы запросов должно завершаться явной операцией COMMIT WORK (или ROLLBACK WORK, если результат нас не устроил)
Журнал транзакцийВозможен выбор между отсутствием поддержки транзакций, буферизованным и небуферизованным журналированиемНебуферизованный журнал
Принадлежность объектов к схемам По существу не имеет большого значения. Нельзя создать два объекта одного и того же типа с одинаковыми именами, но принадлежащие разным пользователям (разным схемам). Указание имени схемы не обязательно. Разрешено создавать несколько объектов одного и того же типа с одинаковыми именами, при условии, что они принадлежат разным пользователям (разным схемам). Имя схемы считается частью сигнатуры объекта. Если имя схемы не указано, считается, что пользователь работает с собственным объектом. При обращении к чужому объекту указание схемы обязательно.
Уровень изоляции по умолчаниюCOMMITTED READREPEATABLE READ
Права доступа для новых объектов по умолчанию Каждому вновь созданному объекту автоматически назначаются права доступа public. Это поведение можно отменить на уровне сессии, установив для этой сессии параметр NODEFDAC=yes Не назначаются. Все права доступа к объекту должны быть назначены явно.
Длинные символьные строки Попытка вставки в таблицу символьной строки, длина которой превышает длину поля, завершится без ошибки, при этом значение будет автоматически обрезано Попытка вставки в таблицу символьной строки, длина которой превышает длину поля, завершится с ошибкой

Как видно, "родные" базы данных Informix налагают на пользователя значительно меньше ограничений.