SQL Server
- Создадим новую БД – ilm_наша фамилия;
- Создадим первую таблицу (temp):
CREATE TABLE temp(
tempID int not null primary key identity(1,1),
temp int not null,
kuupaev datetime,
kirjeldus text)
3. Создадим 2 таблицу (asukoht):
CREATE TABLE asukoht(
asukohtID int not null primary key identity(1,1),
nimetus varchar(100) unique not null,
address varchar(150))
4. Изменим таблицу temp:
ALTER TABLE temp add asukohtID int
5. Добавим связь между таблицами:
ALTER TABLE temp add foreign key (asukohtID)
REFERENCES asukoht(asukohtID)

6. Заполним таблицу без вторичных ключей (asukoht) и просмотри данные, что мы ввели (select):
INSERT INTO asukoht(nimetus, address)
VALUES ('Tallinna lennujaam', 'Tartu mnt 100');
SELECT * from asukoht;

7. Заполняем и вторую таблицу (temp):
INSERT INTO temp(temp, kuupaev, asukohtID, kirjeldus)
VALUES (3, GETDATE(), 1, 'lörts');
SELECT * from temp;

- У нас будут следующие пользователи, со следующими правами:
| Kasutaja: tempSisestaja | Kasutaja: juhataja |
| SELECT, INSERT table temp | DELETE, UPDATE, SELECT table temp, asukoht |
| DENY Select table tempLogi | CREATE TRIGGER |
| SELECT table tempLogi (создаст таблицу tempLogi) | |
8. Создадим таблицу для отслеживания данных- tempLogi:
CREATE TABLE tempLogi(
Id int not null primary key identity(1,1),
kasutaja varchar(100),
aeg datetime,
andmed text)
9. Создаём пользователя tempSisestaja, выдав ему доступ на конкретную БД:

10. Выдаём права нашему новому пользователю:
GRANT SELECT, INSERT ON temp TO tempSisestaja

- Запретим ему редактировать и просматривать tempLogi:
DENY SELECT, INSERT ON tempLogi TO tempSisestaja

11. Создаём 2 пользователя (juhataja):

- Выдаем ему права:
GRANT SELECT, UPDATE, DELETE ON temp TO juhataja;
GRANT SELECT, UPDATE, DELETE ON asukoht TO juhataja;


12. Создадим первый триггер на добавление зайдя под пользователем juhataja:
Create trigger asukohtLisamine
on asukoht
for insert
AS
insert into tempLogi(kasutaja, aeg, andmed)
SELECT USER, GETDATE(), inserted.nimetus
FROM inserted

13. Создаём триггер на основании двух таблиц (temp и asukoht):
Create trigger tempLisamine
on temp
for insert
AS
insert into tempLogi(kasutaja, aeg, andmed)
SELECT USER, GETDATE(),
CONCAT('temp on', inserted.temp, ', asukohas: ',
asukoht.nimetus)
FROM inserted INNER JOIN asukoht ON
inserted.asukohtID=asukoht.asukohtID
14. Заполним таблицу от tempSisestaja:
INSERT INTO temp(temp, kuupaev, asukohtID, kirjeldus)
VALUES (-5, GETDATE(), 1, 'lörts');
select * from temp;
INSERT INTO temp(temp, kuupaev, asukohtID, kirjeldus)
VALUES (-5, GETDATE(), 2, 'lörts');
select * from temp;
15. Проверим таблицу под нашим juhataja:
select * from tempLogi;

- Всё работает! Команда select не распространяется на tempSisestaja:

LOCALHOST
1. Создадим новую БД – ilm_наша фамилия;

2. Cоздадим первую таблицу (temp):
CREATE TABLE temp(
tempID int not null primary key AUTO_INCREMENT,
temp int not null,
kuupaev datetime,
kirjeldus text)
3. Создадим 2 таблицу (asukoht):
CREATE TABLE asukoht(
asukohtID int not null primary key AUTO_INCREMENT,
nimetus varchar(100) unique not null,
address varchar(150))
4. Изменим таблицу temp:
ALTER TABLE temp add asukohtID int
5. Добавим связь между таблицами:
ALTER TABLE temp add foreign key (asukohtID)
REFERENCES asukoht(asukohtID)

6. Заполним таблицу без вторичных ключей (asukoht) и просмотри данные, что мы ввели (select):
INSERT INTO asukoht(nimetus, address)
VALUES ('Tallinna lennujaam', 'Tartu mnt 100');
SELECT * from asukoht;

7. Заполняем и вторую таблицу (temp):
INSERT INTO temp(temp, kuupaev, asukohtID, kirjeldus)
VALUES (3, NOW(), 1, 'lörts');
SELECT * from temp;

8. Создадим таблицу для отслеживания данных- tempLogi:
CREATE TABLE tempLogi(
Id int not null primary key AUTO_INCREMENT,
kasutaja varchar(100),
aeg datetime,
andmed text)
9. Создаём пользователя tempSisestaja:

10. Выдаём права нашему новому пользователю:

- Запретим ему редактировать и просматривать tempLogi:

11. Создаём 2 пользователя (juhataja):

- Выдаем ему права:




12. Создадим первый триггер на добавление, зайдя под пользователем juhataja:
INSERT INTO tempLogi(kasutaja, aeg, andmed)
VALUES (USER(), NOW(), NEW.nimetus)

13. Создаём триггер на основании двух таблиц (temp и asukoht):
INSERT INTO tempLogi(kasutaja, aeg, andmed)
SELECT (USER(), NOW(),
CONCAT('temp on', NEW.temp, ', asukohas: ',
asukoht.nimetus))
FROM temp INNER JOIN asukoht
on temp.asukohtID=asukoht.asukohtID

14. Заполним таблицу temp от tempSisestaja:
INSERT INTO temp(temp, kuupaev, kirjeldus, asukohtID)
VALUES (-5, NOW(), 'päike, 1);
select * from temp;

15. Проверим таблицу под нашим juhataja1:
select * from tempLogi;
