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

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

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

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

Добавлен: 29.11.2023

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Часть 11)2)в3)Часть 24) создание @echo offset /p dbname =введите имя базы данных: set /p backupname=введите имя файла резервной копии: osql -E -Q "BACKUP DATABASE %dbname% TO DISK='%backupname%' WITH FORMAT"echo Резервное копирование завершеноpauseвосстановление @echo offset /p dbname= введите имя восстанавливаемой базы данных: set /p backupname= введите имя файла резервной копии: osql -E -Q "RESTORE DATABASE %dbname% FROM DISK='%backupname%' WITH REPLACE"echo Восстановление завершеноpause5) DECLARE @name VARCHAR(50) -- имя базы данныхDECLARE @path VARCHAR(100) -- каталог для сохранение резервных копийDECLARE @fileName VARCHAR(100) – имя файла резервной копииDECLARE @date VARCHAR(20) -- текущая дата в формате yyyy-mm-ddDECLARE @year VARCHAR(4) -- текущий годDECLARE @month VARCHAR(2) -- текущий месяцDECLARE @day VARCHAR(2) -- текущее числоDECLARE @sql VARCHAR(500) -- строка для выполнения команды BACKUP DATABASEDECLARE db_cursor CURSOR FOR -- определение курсораSELECT nameFROM sys.databasesWHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')OPEN db_cursorFETCH NEXT FROM db_cursor INTO @nameWHILE @@FETCH_STATUS = 0BEGINSET @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 DATABASEFETCH NEXT FROM db_cursor INTO @nameENDCLOSE db_cursorDEALLOCATE db_cursorЧасть 38)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 offset SERVER=localhostset DB_NAME=база_данныхset TABLE1=таблица1set TABLE2=таблица2rem a. Экспорт данных из таблицыsqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1% WHERE условие_отбора_данных" -o "table1.csv" -s"," -Wrem 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%.Часть 410) -- Создание роли "Добавление_Изменение_Запись"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 FORSELECT lastname, firstname, patronymic, rolename FROM Users;OPEN user_cursor;FETCH NEXT FROM user_cursor INTO @lastname, @firstname, @patronymic, @rolename;WHILE @@FETCH_STATUS = 0BEGINSET @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))BEGINSET @count += 1;ENDSET @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;ENDCLOSE user_cursor;DEALLOCATE user_cursor;Где:

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

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

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

  • EXECUTE - это SQL-оператор для выполнения динамических запросов. Он используется для формирования командной строки для создания логина, пользователя и назначения роли.
В этом скрипте используется курсор для перебора записей таблицы Users и создания пользователей с помощью операторов CREATE LOGIN, CREATE USER и ALTER ROLE. Имя логина формируется из первых букв имени, фамилии и отчества, а при дублировании добавляется порядковый номер. Далее происходит назначение пользователю роли, указанной в соответствующем поле таблицы. При необходимости, скрипт можно изменить, чтобы создавать пользователей с другими правами доступа или с другими параметрами логина.12)@echo offset SERVER=localhostset DB_NAME=база_данныхset USERNAME_ADD=пватзователь1set USERNAME_UPDATE=пватзователь2set 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 и запустить его в командной строке для демонстрации работоспособности назначенных прав доступа. Важно убедиться, что в скрипте используются