Triggerid/Kasutajad/Õigused – SQLServer/localhost

SQL Server

  1. Создадим новую БД – ilm_наша фамилия;
  2. Создадим первую таблицу (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: tempSisestajaKasutaja: juhataja
SELECT, INSERT table tempDELETE, UPDATE, SELECT table temp, asukoht
DENY Select table tempLogiCREATE 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;
Design a site like this with WordPress.com
Alustamine