бд. бд БАНК_ЗАДАНИЙ. Удаленный доступ к базе с любого хоста
Скачать 0.91 Mb.
|
Удаленный доступ к базе с любого хоста 'user'@'%' % - это подстановочный знак вы также можете сделать '%.domain.com' или '%.123.123.123' Это позволяет пользователю обращаться к серверу MySQL с любых компьютеров сети. Для проверки посмотрим список пользователей: SELECT user,host,passwordfrommysql.user; Удаление пользователя DROP USER'us1'@'localhost'; ЗАДАНИЕ 20.1.О Создайте несколько пользователей. Создайте пользователей с удаленным доступом. Просмотрите список пользователей. Удалите созданных пользователей. РАБОТА 21.О «Реализация доступа пользователей к базе данных»
Время выполнения задания – 90 минут. Уровень сложности работы – 2 Необходимое оборудование, материалы, документация: ПК, МУ по выполнению практических работ. КРИТЕРИИ ОЦЕНИВАНИЯ РАБОТЫ КРИТЕРИИ ВЫСТАВЛЕНИЯ ОЦЕНКИ
СОДЕРЖАНИЕ РАБОТЫ Создание и отмена привилегий пользователю в БД. 21.ТТиповое задание ХОД ВЫПОЛНЕНИЯ ТИПОВОО ЗАДАНИЯ Т.21 Дать права пользователю MySQL на обновление и добавление записей для базы данных test_database, выполните: GRANT SELECT, UPDATE, INSERT ON test_database . * TO 'test_user'@'localhost'; Дать этому же пользователю: GRANT ALL PRIVILEGES ON test_database .* TO 'test_user'@'localhost'; Посмотреть привилегии пользователя: SHOW GRANTS FOR 'test_user'@'localhost'; Отменить права у пользователя MySQL REVOKE INSERT, DELETE, UPDATE ON Hotels.AllHotels FROM 'user'@'host'; Заберём все права на базу данных test_database у нашего пользователя: REVOKE ALL PRIVILEGES ON test_database .* FROM 'test_user'@'localhost'; Создать суперпользователя Если вам необходимо создать пользователя со всеми правами MySQL на замену для root, то можно использовать такую конструкцию: GRANT ALL PRIVILEGES ON * . * TO 'test_user'@'localhost'; Даём все привилегии для пользователя test_user над всеми базами данными и всеми таблицами. Но наш пользователь не сможет давать права другим пользователям. Чтобы это исправить, нужно дать ему привилегию GRANT, адляэтогоиспользуетсятакаякоманда: GRANTALLPRIVILEGESON* .* TO 'test_user'@'localhost' WITH GRANT OPTION; Теперь этот пользователь является суперпользователем для MySQL и, авторизовавшись от его имени вы можете делать всё то же самое, что и с помощью root. ЗАДАНИЕ 21.1.О 1. Проверить отсутствие пользователя @localhost на сервере. 2. Создать учетные записи для двух пользователей, заходящих с любого компьютера локальной сети, с такими привилегиями: Пользователь US1 (пароль uzaba) получает привилегии на добавление, редактирование, удаление всех полей таблицы. Пользователь US1 (пароль тот же) получает привилегии чтения всех таблиц баз данных db_utf8, db_cp1251. Пользователь read (пароль readb) получает привилегии чтения всех таблиц баз данных. Пользователь sman (пароль sales) получает привилегии на добавление, редактирование, удаление всех полей одной из таблиц таблиц. Пользователь sman (пароль тот же) получает привилегии чтения всех таблиц базы данных. 3. Получить всю информацию из таблиц, связанную с этими новыми пользователями, написав соответствующие запросы. 4. Проверить работоспособность созданных учетных записей, выполняя разрешенные и запрещенные действия для каждой учетной записи. 5. Отменить какие-либо привилегии пользователей 6. Проверить работоспособность созданных учетных записей, выполняя разрешенные и запрещенные действия для каждой учетной записи. РАБОТА 22.О «Создание представлений»
Время выполнения задания – 90 минут. Уровень сложности работы – 2 Необходимое оборудование, материалы, документация: ПК, МУ по выполнению практических работ. КРИТЕРИИ ОЦЕНИВАНИЯ РАБОТЫ КРИТЕРИИ ВЫСТАВЛЕНИЯ ОЦЕНКИ
СОДЕРЖАНИЕ РАБОТЫ Создание представлений. 22.Т Типовое задание Создать представления, основанные на запросе с использованием операторов сравнения и логических операторов. Создать представления, основанные на использовании специальных операторов в запросе. Создать представление, основанные на запросе с вычислимыми полями и полями с форматированием данных. Создать представления, основанные на запросе с соединением таблиц. Создать представления с группировкой данных в запросе. ХОД ВЫПОЛНЕНИЯ ТИПОВОО ЗАДАНИЯ 22.Т Вывести те филиалы, которые выполнили максимальное количество заказов в каждом месяце за последние полгода. Данный запрос можно выполнить, используя дополнительную таблицу (лучше, если это будет VIEW, поскольку данные в нем автоматически обновляются, а в таблице нет) Сначала создадим представление, в которой будем хранить количество заказов, выполненное каждым филиалом по месяцам за последние полгода. CREATE VIEW sum_orders AS SELECT count(ID_Order) AS amount,id_point,month(`order`.order_date) AS month FROM `order` WHERE `order`.order_date > date_sub(now() , INTERVAL 6 month) GROUPBY 2, 3; Теперь выполним запрос, требуемый в задании: SELECT amount, id_point, month FROM sum_orders a WHERE amount = (SELECT max(amount) FROM sum_orders b WHERE a.month = b.month GROUP BY b.month) AND month(now()) - month < 6 Создадим представление, в котором покажем какое количество продано каждого вида продукции. Поскольку часть столбцов являются результатами функций, то для удобства обращения к таблице, при создании представления будем использовать алиасы для имен столбцов. CREATE VIEW products_bought AS SELECT product.Name, sum(Amount) AS Amount FROM `order-product`, `order`, product WHERE lr.`order-product`.Order_ID = lr.`order`.ID_order AND lr.`order-product`.Product_ID = lr.product.ID_prod GROUP BY name; Создать представление, содержащее вычислимые поля и поля с форматированием данных. Создадим представление, в котором выведем перечень заказанной продукции за каждый месяц и общую сумму заказов. В названии столбцов также используем алиасы. В функции group_counat мы использовали команду dictinct, чтобы выводить каждый вид продукции только один раз, а не столько раз, сколько он был заказан. CREATE VIEW products_by_month AS SELECT month(`order`.order_date) AS month, GROUP_CONCAT(DISTINCT product.Name) AS Assortment, sum(product.Price * `order-product`.Amount) AS Amount FROM `order-product`, `order`, product WHERE lr.`order-product`.Order_ID = lr.`order`.ID_order AND lr.`order-product`.Product_ID = lr.product.ID_prod GROUPBY 1; Создать представление, согласно требованиям, представленным в задании. Для каждого заказа вывести его дату, сумму и перечисление купленной продукции. Для каждого заказчика вести историю заказов в следующем виде: имя клиента, дата первого заказа, дата последнего заказа, виды заказанной продукции и общее их количество через запятую в формате: «продукция1 – количество, продукция2 – количество…», общая сумма заказов. Создать такое представление в одном запросе невозможно. Поэтому для выполнения задания создадим промежуточное представление, в котором для каждого клиента будет перечислена вся заказанная им продукция и будут посчитаны количество каждого вида продукции. CREATE VIEW products_by_clients AS SELECT client.ID_client,client.name AS Client,order-product.Product_ID, product.Name AS Product,sum(order-product.Amount) AS Amt, sum(product.Price *order-product.Amount) AS Total FROM client,order,order-product,product WHERE lr.order-product.Order_ID = lr.order.ID_order AND client.ID_client = order.ID_client AND lr.order-product.Product_ID = lr.product.ID_prod GROUP BY client.ID_client, order-product.Product_ID; Теперь создадим представление, требуемое в задании, необходимые данные получим из только что созданного Viewproducts_by_clients и таблицы Заказ. CREATE VIEW clients_orders AS SELECT Client, min(order_date) AS First_order, max(order_date) AS Last_order, GROUP_CONCAT(DISTINCT Product, " - ", B.Amt) AS Assortment, sum(Total) AS Total FROM order A, products_by_clients B WHERE A.ID_client = B.ID_client GROUP BY B.ID_client; Выведем данные из созданного представления. Вывод сделан по частям, поскольку столбцы очень широкие. Создать представление, в котором для каждого филиала вывести общее число заказов, средний чек заказа, минимальную сумму заказа за каждый месяц. Несмотря на то, что в предыдущем задании аналогичное задание было выполнено за один запрос, сделать при помощи того же запроса представление по правилам языка невозможно. Поэтому будем также выполнять задание в два шага. Создадим представление, в котором будут представлены нужные данные о заказе: CREATE VIEW orders AS SELECT order_id, `order`.exec_date AS ex_date, `order`.ID_point AS point, product.Price * `order-product`.Amount AS summa FROM `order-product`, `order`, product WHERE `order-product`.Order_ID = `order`.ID_order AND `order-product`.Product_ID = product.ID_prod; Создать представление с соединением таблиц. Создадим представление, в котором покажем какое количество продано каждого вида продукции. Поскольку часть столбцов являются результатами функций, то для удобства обращения к таблице, при создании представления будем использовать алиасы для имен столбцов. CREATE VIEW products_bought AS SELECT product.Name, sum(Amount) AS Amount FROM `order-product`, `order`, product |