Файл: Set p dbname введите имя базы данных set p backupnameвведите имя файла резервной копии.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 29.11.2023

Просмотров: 10

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Часть 1

1)



2)

в

3)



Часть 2

4) создание

@echo off

set /p dbname =введите имя базы данных:

set /p backupname=введите имя файла резервной копии:

osql -E -Q "BACKUP DATABASE %dbname% TO DISK='%backupname%' WITH FORMAT"

echo Резервное копирование завершено

pause

восстановление

@echo off

set /p dbname= введите имя восстанавливаемой базы данных:

set /p backupname= введите имя файла резервной копии:

osql -E -Q "RESTORE DATABASE %dbname% FROM DISK='%backupname%' WITH REPLACE"

echo Восстановление завершено

pause

5)

DECLARE @name VARCHAR(50) -- имя базы данных

DECLARE @path VARCHAR(100) -- каталог для сохранение резервных копий

DECLARE @fileName VARCHAR(100) – имя файла резервной копии

DECLARE @date VARCHAR(20) -- текущая дата в формате yyyy-mm-dd

DECLARE @year VARCHAR(4) -- текущий год

DECLARE @month VARCHAR(2) -- текущий месяц

DECLARE @day VARCHAR(2) -- текущее число

DECLARE @sql VARCHAR(500) -- строка для выполнения команды BACKUP DATABASE

DECLARE db_cursor CURSOR FOR -- определение курсора

SELECT name

FROM sys.databases

WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')

OPEN db_cursor

FETCH NEXT FROM db_cursor INTO @name

WHILE @@FETCH_STATUS = 0

BEGIN

SET @path = 'C:\Backup\' -- задаем каталог для сохранения резервных копий

SET @year = DATEPART(YEAR, GETDATE()) – получаем текущий год

SET @month = RIGHT('00' + CAST(DATEPART(MONTH, GETDATE()) AS VARCHAR), 2) --получаем текущий месяц с лидирующими нулями

SET @day = RIGHT('00' + CAST(DATEPART(DAY, GETDATE()) AS VARCHAR), 2) –получаем текущее число с лидирующими нулями

SET @date = @year + '-' + @month + '-' + @day – формируем строку с текущей датой

SET @fileName = @path + @name + '-' + @date + '.bak' -- формируем имя файла резервной копии

SET @sql = 'BACKUP DATABASE ' + @name + ' TO DISK = ''' + @fileName + ''''

EXEC(@sql) -- выполняем команду BACKUP DATABASE

FETCH NEXT FROM db_cursor INTO @name

END

CLOSE db_cursor

DEALLOCATE db_cursor

Часть 3

8)

BULK INSERT [имя_таблицы]

FROM 'C:\путь\к\файлу.csv'

WITH (

FIELDTERMINATOR = ',',

ROWTERMINATOR = '\n',

CODEPAGE = 'ACP'

);

Где:

  • Table1 – имя таблицы в базе данных, которую нужно заполнить данными.

  • 'C:\Data\file.csv' - путь к файлу csv, из которого нужно импортировать данные.

  • FIRSTROW – номер строки, с которой начинается импорт данных (обычно это строка заголовка таблицы, которую нужно пропустить).

  • FIELDTERMINATOR - символ-разделитель полей в файле csv (обычно это запятая ',', но может быть другой, в зависимости от формата).

  • ROWTERMINATOR - символ-разделитель строк в файле csv (обычно это символ новой строки '\n', но может быть другой, в зависимости от формата).


9)
@echo off

set SERVER=localhost

set DB_NAME=база_данных

set TABLE1=таблица1

set TABLE2=таблица2

rem a. Экспорт данных из таблицы

sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1% WHERE условие_отбора_данных" -o "table1.csv" -s"," -W

rem b. Экспорт связанных данных в отдельные файлы

bcp %DB_NAME%.dbo.таблица2 out "table2.csv" -S %SERVER% -T -c -t","

rem c. Создание пустой базы данных

sqlcmd -S %SERVER% -E -i "script.sql"

rem d. Импорт данных из файлов

bcp %DB_NAME%.dbo.%TABLE1% in "table1.csv" -S %SERVER% -T -c -t","

bcp %DB_NAME%.dbo.%TABLE2% in "table2.csv" -S %SERVER% -T -c -t","

rem e. Вывод на экран

echo ==== Исходные данные ====

sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1%лERE условие отбора данных"

sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE2%"

echo ==== Импортированные данные ====

sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1%"

sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE2%"

pause

Для запуска файла необходимо его сохранить с расширением .bat и запустить в командной строке.

В данном примере переменная %SERVER%, которая указывает на имя сервера с базой данных, %DB_NAME% - на имя базы данных, %TABLE1% и %TABLE2% - на имена таблиц, из которых нужно экспортировать данные.

На шаге a)данные из таблицы импортируются в файл table1.csv с разделителем ",".

На шаге b) данные из таблицы 2 экспортируются в файл table2.csv.

На шаге c) создается пустая база данных, используя скрипт, написанный в задании 1.

На шаге d)данные из файлов table1.csv и table2.csv импортируются в соответствующие таблицы базы данных.

На шаге e)выводятся на экран исходные данные из таблиц %TABLE1% и %TABLE2% и импортированные данные из таблиц %TABLE1% и %TABLE2%.

Часть 4

10) -- Создание роли "Добавление_Изменение_Запись"

CREATE ROLE Добавление_Изменение_Запись;

-- Назначение прав на таблицу "Table1"

GRANT INSERT, UPDATE, DELETE ON Table1 TO Добавление_Изменение_Запись;

-- Назначение прав на таблицу "Table2"

GRANT INSERT, UPDATE ON Table2 TO Добавление_Изменение;

-- Создание роли "Чтение"

CREATE ROLE Чтение;

-- Назначение прав на таблицы "Table1" и "Table2"

GRANT SELECT ON Table1 TO Чтение;

GRANT SELECT ON Table2 TO Чтение;

Где:

  • Добавление_Изменение_Запись - это имя роли, которая должна иметь права на вставку, изменение и удаление данных из таблиц.

  • Table1 и Table2 - это имена таблиц, для которых назначаются права доступа.

  • Для правил поступа - это права, которые назначаются роли на каждую таблицу. В данном примере роль Добавление_Изменение_Запись получает полномочия на выполнение всех операций (вставка, редактирование, удаление) для таблицы Table1, на таблицу Table2 только на вставку и редактирование, а для роли Чтение назначаются только права на чтение данных из таблиц.


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

11)
DECLARE @lastname VARCHAR(50), @firstname VARCHAR(50), @patronymic VARCHAR(50), @username VARCHAR(50), @rolename VARCHAR(50);

DECLARE user_cursor CURSOR FOR

SELECT lastname, firstname, patronymic, rolename FROM Users;

OPEN user_cursor;

FETCH NEXT FROM user_cursor INTO @lastname, @firstname, @patronymic, @rolename;

WHILE @@FETCH_STATUS = 0

BEGIN

SET @username = SUBSTRING(@lastname, 1, 1) + SUBSTRING(@firstname, 1, 1) + SUBSTRING(@patronymic, 1, 1);

-- Проверяем, если такой логин уже свществует в базе данных, добавляем порядковый номер

DECLARE @count INT = 0;

WHILE EXISTS (SELECT * FROM sys.server_principals WHERE name = @username + CAST(@count AS VARCHAR))

BEGIN

SET @count += 1;

END

SET @username = @username + CAST(@count AS VARCHAR);

-- Создаём логин пользователя

EXECUTE ('CREATE LOGIN [' + @username + '] WITH PASSWORD = ''password''');

EXECUTE ('CREATE USER [' + @username + '] FOR LOGIN [' + @username + ']');

EXECUTE ('ALTER ROLE [' + @rolename + '] ADD MEMBER [' + @username + ']');

FETCH NEXT FROM user_cursor INTO @lastname, @firstname, @patronymic, @rolename;

END

CLOSE user_cursor;

DEALLOCATE user_cursor;

Где:

  • Users - это имя таблицы, в которой содержатся данные для создания пользователей.

  • lastname, firstname, patronymic - это поля таблицы, которые содержат информацию об имени, фамилии и отчестве пользователей.

  • rolename - это поле таблицы, которое содержит информацию о роли, которую нужно назначить пользователю.

  • EXECUTE - это SQL-оператор для выполнения динамических запросов. Он используется для формирования командной строки для создания логина, пользователя и назначения роли.

В этом скрипте используется курсор для перебора записей таблицы Users и создания пользователей с помощью операторов CREATE LOGIN, CREATE USER и ALTER ROLE. Имя логина формируется из первых букв имени, фамилии и отчества, а при дублировании добавляется порядковый номер. Далее происходит назначение пользователю роли, указанной в соответствующем поле таблицы. При необходимости, скрипт можно изменить, чтобы создавать пользователей с другими правами доступа или с другими параметрами логина.

12)

@echo off

set SERVER=localhost

set DB_NAME=база_данных

set USERNAME_ADD=пватзователь1

set USERNAME_UPDATE=пватзователь2

set USERNAME_DELETE=пватзователь3


rem Выбор данных

sqlcmd -S %SERVER% -d %DB_NAME% -U %USERNAME_ADD% -P password -Q "SELECT * FROM Table1"

rem Вставка данных

sqlcmd -S %SERVER% -d %DB_NAME% -U %USERNAME_ADD% -P password -Q "INSERT INTO Table1 (name, value) VALUES ('A', 100)"

rem Редактирование данных

sqlcmd -S %SERVER% -d %DB_NAME% -U %USERNAME_UPDATE% -P password -Q "UPDATE Table1 SET value = 200 WHERE name = 'A'"

rem Удаление данных

sql -d -S %SERVER% -d %DB_NAME% -U %USERNAME_DELETE% -P password -Q "DELETE FROM Table1 WHERE name = 'A'"

pause

В данном примере используются три различных пользователяпватзователь1, пватзователь2 и пватзователь3 и различные запросы для каждого из них. Предполагается, что для каждого пользователя были назначены соответствующие права доступа на таблицу Table1.

На каждом шаге выполняется один из запросов: SELECT для пользователя 1пватзователь1, INSERT для пользователя пватзователь2, UPDATE для пользователя ля пватзователь3 и DELETE для пользователя пватзователь3. Если права доступа назначены корректно, запросы будут успешно выполнены. Если же прав нет, запросы выполнятся с ошибкой.

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