Файл: 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 и запустить его в командной строке для демонстрации работоспособности назначенных прав доступа. Важно убедиться, что в скрипте используются