Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_3.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
691.71 Кб
Скачать
  1. Приложение

-----СОЗДАЕМ БАЗУ ДАННЫХ ФОРУМА-----

go

CREATE DATABASE forum

go

USE forum

-----СОЗДАЕМ ТАБЛИЦЫ-----

go

USE forum

go

--создаем таблицу личной информации пользователя--

CREATE TABLE user_info(

id_user INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

db_user NVARCHAR(128) NOT NULL UNIQUE NONCLUSTERED,

nikname NVARCHAR(50) UNIQUE NOT NULL,

name NVARCHAR(50),

surname NVARCHAR(50),

email NVARCHAR(50) NOT NULL CHECK (email LIKE '%@%.%'),

birthday SMALLDATETIME CHECK (birthday < GETUTCDATE()),

city NVARCHAR(50),

telephone NVARCHAR(12) CHECK (telephone LIKE '+[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),

sex BIT NOT NULL,

time_zone SMALLINT DEFAULT 0,

regdate SMALLDATETIME DEFAULT GETUTCDATE()

)

go

--создаем таблицу активности пользователя--

CREATE TABLE user_activity(

id_user INTEGER NOT NULL FOREIGN KEY REFERENCES user_info(id_user) ON DELETE CASCADE,

topics INTEGER NOT NULL,

answers INTEGER NOT NULL

)

go

--создаем таблицу статистики посещений пользователя--

CREATE TABLE visitor_statistic(

id_user INTEGER NOT NULL FOREIGN KEY REFERENCES user_info(id_user) ON DELETE CASCADE,

last_ip VARCHAR(48),

last_time SMALLDATETIME NOT NULL

)

go

--создаем таблицу информации о рубрике на форуме--

CREATE TABLE rubric(

title NVARCHAR(50) NOT NULL UNIQUE NONCLUSTERED,

id_rubric INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

topics INTEGER DEFAULT 0,

popularity INTEGER DEFAULT 0,

author INTEGER FOREIGN KEY REFERENCES user_info(id_user) ON DELETE SET NULL,

last_change_date SMALLDATETIME DEFAULT GETUTCDATE()

)

go

--создаем таблицу информации о теме на форуме--

CREATE TABLE topic(

id_topic INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

title NVARCHAR(50) NOT NULL UNIQUE NONCLUSTERED,

author INTEGER FOREIGN KEY REFERENCES user_info(id_user) ON DELETE SET NULL,

rubric INTEGER NOT NULL FOREIGN KEY REFERENCES rubric(id_rubric) ON DELETE CASCADE,

creation_date SMALLDATETIME DEFAULT GETUTCDATE(),

last_change_date SMALLDATETIME DEFAULT GETUTCDATE(),

messages_num INTEGER DEFAULT 0

)

go

--создаем таблицу сообщений на форуме--

CREATE TABLE message_info(

id_message INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

src_user INTEGER FOREIGN KEY REFERENCES user_info(id_user) ON DELETE SET NULL,

message_date SMALLDATETIME DEFAULT GETUTCDATE(),

message_text NTEXT,

topic INTEGER NOT NULL FOREIGN KEY REFERENCES topic(id_topic) ON DELETE CASCADE

)

go

--создаем таблицу заблокированных пользователей--

CREATE TABLE black_list(

id_user INTEGER NOT NULL FOREIGN KEY REFERENCES user_info(id_user) ON DELETE CASCADE,

reason_text NVARCHAR(50) NOT NULL,

date_begin SMALLDATETIME DEFAULT GETUTCDATE(),

date_end SMALLDATETIME NOT NULL CHECK(date_end > GETUTCDATE())

)

go

--создаем таблицу групп--

CREATE TABLE group_info(

id_group INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

author INTEGER FOREIGN KEY REFERENCES user_info(id_user) ON DELETE SET NULL,

group_date SMALLDATETIME DEFAULT GETUTCDATE(),

title NVARCHAR(50) NOT NULL UNIQUE NONCLUSTERED

)

go

--создаем таблицу голосований--

CREATE TABLE votes(

id_vote INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

question NVARCHAR(150) NOT NULL,

author INTEGER FOREIGN KEY REFERENCES user_info(id_user) ON DELETE SET NULL,

id_group INTEGER NOT NULL FOREIGN KEY REFERENCES group_info(id_group) ON DELETE CASCADE,

date_begin SMALLDATETIME DEFAULT GETUTCDATE(),

date_end SMALLDATETIME NOT NULL CHECK(date_end > GETUTCDATE())

)

go

--создаем таблицу ответов--

CREATE TABLE answers(

id_answer INTEGER IDENTITY(1,1) PRIMARY KEY CLUSTERED,

vote INTEGER NOT NULL FOREIGN KEY REFERENCES votes(id_vote) ON DELETE CASCADE,

ans_number TINYINT NOT NULL,

ans_text NVARCHAR(150),

quantity INTEGER DEFAULT 0

)

go

--создаем таблицу принадлежности пользователя группе--

CREATE TABLE user_group(

id_user INTEGER NOT NULL FOREIGN KEY REFERENCES user_info(id_user) ON DELETE CASCADE,

id_group INTEGER NOT NULL FOREIGN KEY REFERENCES group_info(id_group) ON DELETE CASCADE

)

go

--талица истории лучших пользователей--

CREATE TABLE best_users(

id_user INTEGER NOT NULL FOREIGN KEY REFERENCES user_info(id_user) ON DELETE CASCADE,

points INTEGER NOT NULL,

choise_date SMALLDATETIME NOT NULL

)

------------------------------------СОЗДАЕМ ТРИГЕРЫ--------------------------------------

go

------------------тригер, выполняющийся при добавлении пользователя в базу---------------

CREATE TRIGGER AddUserTrigger

ON user_info

AFTER INSERT

AS

INSERT INTO user_activity (id_user, topics, answers)

SELECT id_user, 0, 0

FROM inserted

INSERT INTO visitor_statistic (id_user, last_ip, last_time)

SELECT id_user, CAST(CONNECTIONPROPERTY('client_net_address') AS VARCHAR(48)), GETUTCDATE()

FROM inserted

go

---------------------тригер, выполняющийся при добавлении темы-------------------------

CREATE TRIGGER AddTopicTrigger

ON topic

AFTER INSERT

AS

declare @cnt int

UPDATE rubric SET topics = topics + (SELECT COUNT(*)

FROM inserted

WHERE rubric.id_rubric = rubric)

UPDATE rubric SET last_change_date = GETUTCDATE()

WHERE id_rubric IN (SELECT rubric

FROM inserted)

UPDATE user_activity SET topics = topics + (SELECT COUNT(*)

FROM inserted

WHERE user_activity.id_user = author)

go

-----------------------тригер, выполняющийся при добавлении сообщения---------------------

CREATE TRIGGER AddMessageTrigger

ON message_info

AFTER INSERT

AS

UPDATE topic SET messages_num = messages_num + (SELECT COUNT(*)

FROM inserted

WHERE topic.id_topic = topic)

UPDATE topic SET last_change_date = GETUTCDATE()

WHERE id_topic IN (SELECT topic

FROM inserted)

UPDATE user_activity SET answers = answers + (SELECT COUNT(*)

FROM inserted

WHERE user_activity.id_user = src_user)

UPDATE rubric SET popularity = popularity + (SELECT COUNT(*)

FROM topic INNER JOIN inserted ON topic.id_topic = inserted.topic

WHERE rubric.id_rubric = rubric)

UPDATE rubric SET last_change_date = GETUTCDATE()

WHERE id_rubric IN (SELECT rubric

FROM topic AS t inner join inserted AS i

ON t.id_topic = i.topic)

---------------------СОЗДАЕМ ХРАНИМЫЕ ПРОЦЕДУРЫ-------------------------

------------------------Интерфейсные процедуры--------------------------

go

-----------------процедура добавления пользователя---------------------

CREATE PROCEDURE AddUser

@nikname NVARCHAR(50),

@passwd NVARCHAR(15),

@name NVARCHAR(50) = NULL,

@surname NVARCHAR(50) = NULL,

@email NVARCHAR(50),

@birthday SMALLDATETIME = NULL,

@city NVARCHAR(50) = NULL,

@telephone NVARCHAR(12) = NULL,

@sex BIT,

@time_zone SMALLINT

AS

DECLARE @result BIT,

@db_user NVARCHAR(128)

SELECT @db_user = 'user_' + @nikname

EXEC @result = sp_addlogin @db_user, @passwd, 'forum'

IF @result = 1

BEGIN

PRINT 'Login can not be created'

RETURN

END

EXEC @result = sp_adduser @db_user, @db_user, 'user_role'

IF @result = 1

BEGIN

EXEC sp_droplogin @db_user

PRINT 'User can not be created'

RETURN

END

INSERT INTO user_info (db_user,nikname,name,surname,email,birthday,city,telephone,sex,time_zone)

VALUES (@db_user,@nikname,@name,@surname,@email,@birthday,@city,@telephone,@sex,@time_zone)

IF @@ROWCOUNT = 0

BEGIN

EXEC sp_droplogin @db_user

EXEC sp_dropuser @db_user

PRINT 'Record can not be created'

RETURN

END

go

-------------------процедура удаления пользователя-----------------------

CREATE PROCEDURE DeleteUser

@nikname NVARCHAR(50)

AS

DECLARE @db_user NVARCHAR(128),@result BIT

SELECT @db_user = 'user_' + @nikname

EXEC @result = sp_droplogin @db_user

IF @result = 1

BEGIN

PRINT 'Login can not be deleted'

END

EXEC @result = sp_dropuser @db_user

IF @result = 1

BEGIN

PRINT 'User can not be deleted'

END

DELETE FROM user_info

WHERE @db_user = db_user

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Record can not be deleted'

END

go

---------------------процедура просмотра личной информации----------------------

CREATE PROCEDURE ShowPrivateInfo

AS

SELECT *

FROM user_info

WHERE USER_NAME() = db_user

go

---------------------процедура изменения личной информации----------------------

CREATE PROCEDURE ChangePrivateInfo

@name NVARCHAR(50) = NULL,

@surname NVARCHAR(50) = NULL,

@email NVARCHAR(50) = NULL,

@birthday SMALLDATETIME = NULL,

@city NVARCHAR(50) = NULL,

@telephone NVARCHAR(12) = NULL,

@sex BIT = NULL,

@time_zone SMALLINT = NULL

AS

UPDATE user_info SET

name = CASE

WHEN @name IS NULL THEN name

WHEN @name IS NOT NULL THEN @name

END,

surname = CASE

WHEN @name IS NULL THEN surname

WHEN @name IS NOT NULL THEN @surname

END,

email = CASE

WHEN @email IS NULL THEN email

WHEN @email IS NOT NULL THEN @email

END,

birthday = CASE

WHEN @birthday IS NULL THEN birthday

WHEN @birthday IS NOT NULL THEN @birthday

END,

city = CASE

WHEN @city IS NULL THEN city

WHEN @city IS NOT NULL THEN @city

END,

telephone = CASE

WHEN @telephone IS NULL THEN telephone

WHEN @telephone IS NOT NULL THEN @telephone

END,

sex = CASE

WHEN @sex IS NULL THEN sex

WHEN @sex IS NOT NULL THEN @sex

END,

time_zone = CASE

WHEN @time_zone IS NULL THEN time_zone

WHEN @time_zone IS NOT NULL THEN @time_zone

END

WHERE USER_NAME() = db_user

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Information was not updated'

END

go

-------------------процедура добавления пользователя в "черный список"-------------------

CREATE PROCEDURE AddUserToBlackList

@nikname NVARCHAR(50),

@reason_text NVARCHAR(50),

@date_end SMALLDATETIME = NULL

AS

IF EXISTS (SELECT *

FROM black_list AS bl INNER JOIN user_info AS ui

ON bl.id_user = ui.id_user AND ui.nikname = @nikname)

UPDATE black_list SET date_end = CASE

WHEN @date_end IS NULL THEN '2079-06-06'

ELSE @date_end

END

ELSE

INSERT INTO black_list(id_user,reason_text,date_end)

VALUES ((SELECT id_user

FROM user_info

WHERE @nikname = nikname), @reason_text,CASE

WHEN @date_end IS NULL THEN '2079-06-06'

ELSE @date_end

END)

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Information was not updated'

END

go

-------------------------------процедура создания группы----------------------------------

CREATE PROCEDURE CreateGroup

@title NVARCHAR(50)

AS

INSERT INTO group_info (title, author)

VALUES (@title, (SELECT id_user

FROM user_info

WHERE USER_NAME() = db_user))

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Group was not created'

END

go

----------------------процедура добавления пользователя в группу-------------------------

CREATE PROCEDURE JoinGroup

@groupname NVARCHAR(50)

AS

INSERT INTO user_group (id_user, id_group)

VALUES ((SELECT id_user

FROM user_info

WHERE USER_NAME() = db_user), ( SELECT id_group

FROM group_info

WHERE @groupname = title))

IF @@ROWCOUNT = 0

BEGIN

PRINT 'User was not added to group'

END

go

-----------------------------процедура создания сообщения---------------------------------

CREATE PROCEDURE CreateMessage

@message_text NTEXT,

@title NVARCHAR(50)

AS

INSERT INTO message_info (src_user,message_text,topic)

VALUES ((SELECT id_user

FROM user_info

WHERE USER_NAME() = db_user), @message_text, (SELECT id_topic

FROM topic

WHERE @title = title))

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Message was not created'

END

go

----------------------------------процедура создания темы---------------------------------

CREATE PROCEDURE CreateTopic

@title NVARCHAR(50),

@rubric NVARCHAR(50)

AS

INSERT INTO topic (title,author,rubric)

VALUES (@title, (SELECT id_user

FROM user_info

WHERE USER_NAME() = db_user), (SELECT id_rubric

FROM rubric

WHERE title = @rubric))

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Topic was not created'

END

go

--------------------------------процедура создания рубрики-------------------------------

CREATE PROCEDURE CreateRubric

@title NVARCHAR(50)

AS

INSERT INTO rubric (title,author)

VALUES (@title, (SELECT id_user

FROM user_info

WHERE USER_NAME() = db_user))

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Rubric was not created'

END

go

----------------------------процедура создания голосования-------------------------------

CREATE PROCEDURE CreateVote

@question NVARCHAR(150),

@group NVARCHAR(50),

@date_end SMALLDATETIME = NULL

AS

INSERT INTO votes (question, author, id_group, date_end)

VALUES (@question, (SELECT id_user

FROM user_info

WHERE USER_NAME() = db_user), (SELECT id_group

FROM group_info

WHERE @group = title), CASE

WHEN @date_end IS NULL THEN '2079-06-06'

ELSE @date_end

END)

IF @@ROWCOUNT = 0

BEGIN

PRINT 'Vote was not created'

END

go

-----------------------процедура создания ответов на голосование-------------------------

CREATE PROCEDURE AddAnswer

@vote INTEGER,

@ans_text NVARCHAR(50)

AS

DECLARE @user NVARCHAR(50), @num INTEGER

SELECT @user = ui.db_user

FROM user_info AS ui INNER JOIN votes AS v

ON v.id_vote = @vote AND ui.id_user = v.author

IF @user <> USER_NAME()

BEGIN

PRINT 'Access deny'

RETURN

END

SELECT @num = COUNT(*) + 1

FROM answers

WHERE @vote = vote

INSERT INTO answers (vote,ans_number,ans_text)

VALUES(@vote,@num,@ans_text)

go

------------------------процедура дачи ответа на голосование----------------------------

CREATE PROCEDURE VoteCast

@vote INTEGER,

@ans_number TINYINT

AS

UPDATE answers SET quantity = quantity + 1

WHERE vote = @vote AND ans_number = @ans_number

go

-----------------процедура удаления пользователя из группы-------------------------------

CREATE PROCEDURE LeaveGroup

@group NVARCHAR(50)

AS

DELETE FROM user_group

WHERE id_user IN (SELECT id_user

FROM user_info

WHERE db_user = USER_NAME()) AND id_group IN (SELECT id_group

FROM group_info

WHERE title = @group)

go

--------------------процедура удаления сообщения(для модераторов)------------------------

CREATE PROCEDURE DeleteMessage

@id_message INTEGER

AS

DELETE FROM message_info

WHERE id_message = @id_message

go

------------------процедура удаления сообщения из собственной темы-----------------------

CREATE PROCEDURE DeleteMessageFromOwnTopic

@id_message INTEGER

AS

DECLARE @user NVARCHAR(50)

SELECT @user = ui.db_user

FROM user_info AS ui INNER JOIN topic AS tp

ON ui.id_user = tp.author INNER JOIN message_info AS mi

ON mi.topic = tp.id_topic

IF @user <> USER_NAME()

BEGIN

PRINT 'Access deny'

RETURN

END

DELETE FROM message_info

WHERE id_message = @id_message

---------------------------------Процедуры-запросы-------------------------------------

go

--процедура возвращает количкство зарегистрированных в определенный период пользователей--

CREATE PROCEDURE UsersNumberInPeriod

@startdate SMALLDATETIME = '1900-01-01',

@enddate SMALLDATETIME = '2079-06-06',

@number INTEGER OUTPUT

AS

SELECT @number = COUNT (*)

FROM user_info AS ui

WHERE ui.regdate > @startdate AND ui.regdate < @enddate

go

--процедура возвращает количкство сообщений, оставленных в определенный период времени--

CREATE PROCEDURE MessagesNumber

@startdate SMALLDATETIME,

@enddate SMALLDATETIME,

@number INTEGER OUTPUT

AS

SELECT @number = COUNT (*)

FROM message_info AS mi

WHERE mi.message_date > @startdate AND mi.message_date < @enddate

go

--процедура возвращает среднее/минимальное/максимальное кол-во сообщений в день/месяц/год--

CREATE PROCEDURE MessagesNumberStatistic

@agrigatetype TINYINT, --1 - min, 2 - max, 3 - avg

@periodtype TINYINT, --1 - day, 2 - month, 3 - year

@number INTEGER OUTPUT

AS

SELECT @number = CASE @agrigatetype

WHEN 1 THEN MIN(cnt)

WHEN 2 THEN MAX(cnt)

WHEN 3 THEN AVG(cnt)

END

FROM (SELECT COUNT(*) cnt

FROM message_info

GROUP BY CASE @periodtype

WHEN 1 THEN DAY(message_date)

WHEN 2 THEN MONTH(message_date)

WHEN 3 THEN YEAR(message_date)

END

) AS SUB

go

--процедура возвращает таблицу статистики активности пользователей на форуме--

CREATE PROCEDURE TimeMessageStatistic

@periodtype TINYINT --1 - day, 2 - month, 3 - year

AS

SELECT CASE @periodtype

WHEN 1 THEN DAY(message_date)

WHEN 2 THEN MONTH(message_date)

WHEN 3 THEN YEAR(message_date)

END AS 'Period', COUNT(*) AS 'Sum', CAST(COUNT(*) AS FLOAT)/(SELECT COUNT(*)

FROM message_info AS 'Percentage'

FROM message_info

GROUP BY CASE @periodtype

WHEN 1 THEN DAY(message_date)

WHEN 2 THEN MONTH(message_date)

WHEN 3 THEN YEAR(message_date)

END

go

--процедура обносвляет таблицу лучших пользователей форума--

CREATE PROCEDURE UpdateUserStatistic

AS

INSERT INTO best_users (id_user, points,choise_date)

SELECT TOP 10 id_user, answers, GETUTCDATE()

FROM user_activity

ORDER BY answers

go

--процедура удаляет пустые темы, на которые нет ответа в течении двух недель--

CREATE PROCEDURE DeleteTopics

AS

DELETE FROM topic

WHERE DATEDIFF(WEEK, last_change_date, GETUTCDATE()) >= 2 AND id_topic NOT IN

(SELECT topic

FROM message_info

GROUP BY topic

HAVING COUNT(*) > 1)

go

--процедура удаляет пользователей из "блэк-листа" по истечении времени--

CREATE PROCEDURE UnlockUsers

AS

DELETE FROM black_list

WHERE date_end < GETUTCDATE()

go

--процедура возвращает кол-во пользователей, не посещавших форум с определенного времени--

CREATE PROCEDURE UserVisitNumber

@date SMALLDATETIME,

@num INTEGER OUTPUT

AS

SELECT @num = COUNT(*)

FROM visitor_statistic

WHERE last_time < @date

go

--процедура возвращает среднее/минимальное/максимальное время блокирования пользователя--

CREATE PROCEDURE BlockTimeStatistic

@agrigatetype TINYINT, --1 - min, 2 - max, 3 - avg

@avgtime INTEGER OUTPUT

AS

SELECT @avgtime = CASE @agrigatetype

WHEN 1 THEN MIN(DATEDIFF(DAY, date_end, date_begin))

WHEN 2 THEN MAX(DATEDIFF(DAY, date_end, date_begin))

WHEN 3 THEN AVG(DATEDIFF(DAY, date_end, date_begin))

END

FROM black_list

go

--процедура возвращает среднее/минимальное/максимальное количество пользователей, участвующих в голосованиях--

CREATE PROCEDURE VoteStatistic

@agrigatetype TINYINT, --1 - min, 2 - max, 3 - avg

@num INTEGER OUTPUT

AS

SELECT @num = CASE @agrigatetype

WHEN 1 THEN MIN(answers)

WHEN 2 THEN MAX(answers)

WHEN 3 THEN AVG(answers)

END

FROM vote

go

--процедура возвращает количество пользователей, попавших в "черный список" в определенный период--

CREATE PROCEDURE BlockUsersStatistic

@startdate SMALLDATETIME,

@enddate SMALLDATETIME,

@number INTEGER OUTPUT

AS

SELECT @number = COUNT (*)

FROM black_list AS bl

WHERE bl.date_begin > @startdate AND bl.date_end < @enddate

-----СОЗДАЕМ ДЖОБЫ-----

go

USE msdb

go

--резервное копирование базы данных (каждую неделю)--

EXEC sp_add_job

@job_name = 'BackUpDatabase',

@enabled = 1,

@description = 'резервное копирование БД',

@owner_login_name = 'sa'

go

EXEC sp_add_jobstep

@job_name = 'BackUpDatabase',

@step_name = 'BackUp',

@subsystem = 'TSQL',

@command = 'BACKUP DATABASE forum TO DISK = ''c:\BackUps\forum.dat_bak''',

@retry_attempts = 5,

@retry_interval = 10

go

EXEC sp_add_jobschedule

@job_name = 'BackUpDatabase',

@name = 'BackupSchedule',

@freq_type = 8, --every week

@freq_interval = 2, --monday

@freq_recurrence_factor = 1, --every one week

@active_start_time = 050000 --5:00

EXEC sp_add_jobserver @job_name = 'BackUpDatabase', @server_name = N'(local)'

go

--определение лучшего пользователя месяца (каждый месяц)--

EXEC sp_add_job

@job_name = 'DetermineBestUser',

@enabled = 1,

@description = 'определение лучшего пользователя',

@owner_login_name = 'sa'

go

EXEC sp_add_jobstep

@job_name = 'DetermineBestUser',

@step_name = 'Determine',

@subsystem = 'TSQL',

@command = 'exec UpdateUserStatistic',

@database_name = 'forum',

@retry_attempts = 2,

@retry_interval = 2

go

EXEC sp_add_jobschedule

@job_name = 'DetermineBestUser',

@name = 'DetermineSchedule',

@freq_type = 16, --every month

@freq_interval = 1, --first day of month

@freq_recurrence_factor = 1, --every one month

@active_start_time = 220000 --22:00

EXEC sp_add_jobserver @job_name = 'DetermineBestUser', @server_name = N'(local)'

go

--удаление тем, на которые нет ни одного ответа в течение двух недель (каждую неделю)--

EXEC sp_add_job

@job_name = 'TopicsDelete',

@enabled = 1,

@description = 'удаление тем',

@owner_login_name = 'sa'

go

EXEC sp_add_jobstep

@job_name = 'TopicsDelete',

@step_name = 'Delete',

@subsystem = 'TSQL',

@command = 'exec DeleteTopics',

@database_name = 'forum',

@retry_attempts = 3,

@retry_interval = 2

go

EXEC sp_add_jobschedule

@job_name = 'TopicsDelete',

@name = 'TopicsDeleteSchedule',

@freq_type = 8, --every week

@freq_interval = 2, --monday

@freq_recurrence_factor = 1, --every one week

@active_start_time = 060000 --6:00

EXEC sp_add_jobserver @job_name = 'TopicsDelete', @server_name = N'(local)'

go

--Разблокировка пользователя согласно сроку разблокировки в «черном списке» (каждый день--

EXEC sp_add_job

@job_name = 'UnlockUsers',

@enabled = 1,

@description = 'разблокировка пользователей',

@owner_login_name = 'sa'

go

EXEC sp_add_jobstep

@job_name = 'UnlockUsers',

@step_name = 'Unlock',

@subsystem = 'TSQL',

@command = 'exec UnlockUsers',

@database_name = 'forum',

@retry_attempts = 5,

@retry_interval = 5

go

EXEC sp_add_jobschedule

@job_name = 'UnlockUsers',

@name = 'ScheduledBackup',

@freq_type = 4, --every day

@freq_interval = 1, --every day

@active_start_time = 000000 --0:00

EXEC sp_add_jobserver @job_name = 'UnlockUsers', @server_name = N'(local)'

----------------------------СОЗДАЕМ ГРУППЫ ПОЛЬЗОВАТЕЛЕЙ-------------------------

go

USE forum

go

----------------------------------Администратор-----------------------------------

EXEC sp_addlogin 'administrator', '123456', 'forum'

EXEC sp_addrole 'admin_role'

EXEC sp_adduser 'administrator', 'Administrator', 'admin_role'

go

--права для роли admin_role--

GRANT ALL ON best_users TO admin_role

GRANT ALL ON black_list TO admin_role

GRANT ALL ON group_info TO admin_role

GRANT ALL ON message_info TO admin_role

GRANT ALL ON topic TO admin_role

GRANT ALL ON user_activity TO admin_role

GRANT ALL ON user_group TO admin_role

GRANT ALL ON user_info TO admin_role

GRANT ALL ON visitor_statistic TO admin_role

GRANT ALL ON votes TO admin_role

GRANT ALL ON rubric TO admin_role

GRANT ALL ON answers TO admin_role

GRANT ALL ON DayMessageStatistic TO admin_role

GRANT ALL ON HourMessageStatistic TO admin_role

GRANT ALL ON MonthMessageStatistic TO admin_role

GRANT ALL ON YearMessageStatistic TO admin_role

GRANT EXEC ON AddUser TO admin_role

GRANT EXEC ON DeleteUser TO admin_role

GRANT EXEC ON ShowPrivateInfo TO admin_role

GRANT EXEC ON ChangePrivateInfo TO admin_role

GRANT EXEC ON AddUserToBlackList TO admin_role

GRANT EXEC ON CreateGroup TO admin_role

GRANT EXEC ON BlockTimeStatistic TO admin_role

GRANT EXEC ON JoinGroup TO admin_role

GRANT EXEC ON CreateMessage TO admin_role

GRANT EXEC ON CreateTopic TO admin_role

GRANT EXEC ON CreateRubric TO admin_role

GRANT EXEC ON CreateVote TO admin_role

GRANT EXEC ON AddAnswer TO admin_role

GRANT EXEC ON VoteCast TO admin_role

GRANT EXEC ON AddUserToBlackList TO admin_role

GRANT EXEC ON UsersNumberInPeriod TO admin_role

GRANT EXEC ON MessagesNumber TO admin_role

GRANT EXEC ON MessagesNumberStatistic TO admin_role

GRANT EXEC ON UpdateUserStatistic TO admin_role

GRANT EXEC ON DeleteTopics TO admin_role

GRANT EXEC ON UnlockUsers TO admin_role

GRANT EXEC ON UserVisitNumber TO admin_role

GRANT EXEC ON BlockTimeStatistic TO admin_role

GRANT EXEC ON VoteStatistic TO admin_role

GRANT EXEC ON BlockUsersStatistic TO admin_role

GRANT EXEC ON DeleteMessage TO admin_role

go

----------------------------------Пользователь-----------------------------------

EXEC sp_addrole 'user_role'

go

--права для роли user_role--

GRANT EXEC ON ShowPrivateInfo TO user_role

GRANT EXEC ON ChangePrivateInfo TO user_role

GRANT EXEC ON CreateGroup TO user_role

GRANT EXEC ON JoinGroup TO user_role

GRANT EXEC ON CreateMessage TO user_role

GRANT EXEC ON CreateTopic TO user_role

GRANT EXEC ON CreateRubric TO user_role

GRANT EXEC ON CreateVote TO user_role

GRANT EXEC ON AddAnswer TO user_role

GRANT EXEC ON VoteCast TO user_role

GRANT EXEC ON LeaveGroup TO user_role

GRANT EXEC ON DeleteMessageFromOwnTopic TO user_role

GRANT SELECT ON rubric TO user_role

GRANT SELECT ON topic TO user_role

GRANT SELECT ON message_info TO user_role

GRANT SELECT ON group_info TO user_role

GRANT SELECT ON votes TO user_role

GRANT SELECT ON answers TO user_role

GRANT SELECT ON best_users TO user_role

go

----------------------------------Модератор-----------------------------------

EXEC sp_addrole 'moderator_role'

go

--права для роли moderator_role--

GRANT EXEC ON AddUserToBlackList TO moderator_role

GRANT EXEC ON DeleteMessage TO moderator_role

6

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]