Як приховати / відключити таблиці, не скидаючи їх, щоб перевірити надмірність?


12

Мені доводиться підтримувати і розширювати стару застарілу систему, яка містить методи веб-сервісу та таблиці баз даних, які більше не використовуються. Оскільки я не зовсім впевнений, що таблиці справді зайві, я боюся їх скинути.

Чи є якийсь інший спосіб досягти такого ж ефекту (таблиці більше не можна використовувати), не скидаючи їх? Моя ідея полягала в тому, щоб перевести їх в іншу схему (наприклад, Deleted) від поточної замовчуванням dbo.

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Deleted')
BEGIN
   EXEC('CREATE SCHEMA Deleted')
END

ALTER SCHEMA Deleted TRANSFER dbo.TableName;

Чи є якийсь інший варіант чи є недоліки у підході до схеми?

Відповіді:


7

Чи є якийсь інший спосіб досягти того ж (таблиці не можна використовувати більше), не скидаючи їх?

Зміна схеми - дуже швидка операція - потрібна лише зміна метаданих. Оригінальна ідея, яку я отримав, була з блогу Аарона Бертран - Schema Switch-A-Roo .

Ви можете слідувати крокам з моєї відповіді тут

Очевидно, є й інші методи, такі як sp_rename N'old table ', N'new table' або просто забороняють дозволу на таблицю.


Я не був впевнений, яку відповідь я повинен прийняти, бо всі корисні. Я не знав статті Аарона, тому прийняв цю інформацію, оскільки вона містить більше інформації (навіть якщо вона лише пов'язана).
Тім Шмелтер

@TimSchmelter Радий, що Ви вважаєте це корисним. Немає сенсу повторювати тут статтю чи мою відповідь (пов’язану). Ось чому я на це посилався.
Кін Шах

12

Кілька інших варіантів - просто перейменувати таблиці, або якщо вони мають кластерні індекси, ви можете відключити кластерний індекс.


Дякую. Я не знав, що відключення кластерного індексу робить таблицю непридатною. Які плюси і мінуси цих підходів (+ схема)?
Тім Шмелтер

5
@TimSchmelter Конфіденція відключення ІП полягає в тому, що для його ввімкнення вам потрібно відновити індекс. Ще одним варіантом є заборона дозволів на таблиці на загальнодоступну роль, хоча власник бази даних або системні адміністратори все одно їх бачитимуть, а також, можливо, через ланцюг власності.
Мартін Сміт

Перед тим, як видалити таблицю або скинути стовпчик із таблиці, я часто перейменую її, додавши до кінця імені "_deprected" або щось таке. Тоді, якщо помилок немає, не повинно бути нічого, на що посилається.
Джей

Зміни дозволів - це химерність. Якщо службовим обліковим записом, на якому працює програма, є dbo, або ще гірше sysadmin, він повністю ігнорує будь-який тип DENY. Сподіваємось, їх немає, але це трапляється.
Кеннет Фішер

6

Видаліть дозволи в таблиці з Рольових груп / груп / облікових записів, які [, можливо], використовують її.

Якщо щось підірветься, поверніть їх [швидко].

Підказка: Використання сценарію для внесення цих змін було б дійсно, дуже гарною ідеєю.


Як би тестування на невиробничій базі даних. ;) Сподіваємось, це було очевидно для ОП.
jpmc26

@ jpmc26. Я спробую спочатку в невиробничій базі даних. Але проблема полягає в тому, що я хочу знати, чи використовуються функції або об’єкти бази даних ззовні (не тільки методами веб-сервісу, але також безпосередньо в базі даних або інструментах адміністратора в інших місцях компанії).
Тім Шмелтер

Гм. Якщо ви шукаєте прямий доступ до БД за допомогою DBA, це здається, що реєстрація в порядку. Це може бути не дуже ймовірним, що ви побачите однакове використання в продажі та не-продажі від ручної роботи. Я не дуже впевнений, наскільки легко було б реєструвати ці операції, але якби у вас був вхід у додаток, ви могли проаналізувати його, щоб шукати звичаї.
jpmc26

@ jpmc26: це нормально, якщо ці адміністратори впадуть на обличчя, вони повідомлять про це. Не в порядку з клієнтами, але це можна перевірити на тест-системі перед запуском.
Тім Шмелтер

3

Видалення дозволів, як правило, не спрацьовує, оскільки ви не можете ПІДТРИМАТИ, що хтось не має дозволів. Можливо, через групу, роль чи навіть через те, що вони є систематичними (хоча сподіваємось, що ні).

Для таблиць їх можна відключити. І це швидкий процес. Однак для їх включення потрібно перебудувати їх та створити великий стіл, який може зайняти у вас досить тривалий час.

Вашою найкращою ставкою буде переміщення об'єкта в нову схему (як ви запропонували) або перейменування об'єкта. Обидві ці операції є швидкими та простими як для виконання, так і для скасування. Дозволи також залишатимуться в обох напрямках.

Додатковим кроком, який ви можете зробити, є додавання "примітки про TBD" у розширені властивості об'єкта. Ви можете зробити помітку про те, коли ви внесли зміни, та / або будь-які замітки, про які ви вважаєте, що безпечно позбутися.

Все, що було сказано, я проведу розширений сеанс подій (або простеження профілю) протягом декількох днів, щоб бути впевненим, що у вас є всі використовувані об'єкти. Ви можете сильно обмежити сеанс лише іменем об'єкта та коли його торкнулося, щоб зменшити накладні витрати. Також переконайтеся, що ви запускаєте цей сеанс протягом декількох днів в обидві сторони кінця місяця і, можливо, навіть в кінці кварталу, щоб бути впевненим, що у вас є все.


3

Видаліть дозволи, як пропонує Філ В.

Також видаліть дозволи з усіх збережених процедур, які використовують таблиці. У SQL Server (я не знаю про інших) дозволи дозволені ланцюжком від викликаючого об'єкта (наприклад, збереженої процедури) до об'єкта, що викликається (наприклад, таблиці).


Завдання полягало у тому, щоб не допустити відмови всіх інструментів, функцій, об’єктів, запитів (навіть у віддалених базах даних), які намагаються отримати доступ до цих таблиць. Якщо мені потрібно змінити збережену процедуру, я вже повинен знати, що вона використовує її. Або є якийсь простий спосіб визначити, що таблиця використовується зберігається процедурою?
Тім Шмелтер

Я не пропонував змінювати збережену процедуру, лише видалив її ВИКОНАВЧИЙ дозвіл. Як ви кажете, відновити дозвіл легко, якщо потрібно. Ви можете побачити, які таблиці використовуються збереженою процедурою: У студії управління SQL Server, Провідник об’єктів, виберіть свою базу даних -> Програмоване -> Збережені процедури. Клацніть правою кнопкою миші ім'я відростка та виберіть Перегляд залежностей. Виберіть Об'єкти, від яких залежить [ім'я паростка].
Пітер Білл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.