У вас тут є кілька різних запитань, тому я вибиваю їх окремо:
"Я читав, що найкраща практика забороняти користувачам використовувати вхід sa безпосередньо, а не використовувати автентифікацію Windows"
Тут ви змішуєте дві речі: концепцію SA та концепцію автентифікації SQL та автентифікації Windows.
Аутентифікація SQL - це список імен користувачів та паролів, які зберігаються у кожному SQL-сервері. Те, що він зберігається в SQL, є першою проблемою. Якщо вам потрібно змінити пароль для входу, ви повинні змінити його на кожному сервері (або підтримувати різні паролі на різних серверах). За допомогою автентифікації Windows ви можете центрально відключити вхід, змінити паролі, встановити політику тощо.
Якщо ви вирішили використовувати автентифікацію SQL, то SA - це лише один логін для автентифікації SQL. Це ім'я адміністратора за замовчуванням, як і адміністратор в системі автентифікації Windows. Він має локальні наддержави в одному екземплярі, але не глобальні наддержави в усіх випадках.
"... і дозволяти цим обліковим записам (або групам облікових записів) привілеїв системного адміністратора."
Який би метод аутентифікації ви не вибрали, в ідеалі ви хочете дотримуватися принципу найменшої пільги: надання людям мінімальних прав, які вони потребують, щоб виконати свою роботу, і не більше.
Не думайте про них як про реєстрацію - це люди, які можуть вас звільнити. Якщо вони випадково відкинуть базу даних або відключать ваші завдання резервного копіювання, вони не звільняться, оскільки за замовчуванням SQL не відстежує, хто що робив. Ти будеш звільнений, бо це станеться, і ти не зможеш сказати, хто це зробив.
"Як найкраща практика підвищує безпеку моїх екземплярів SQL Server?"
Ви хочете зробити дві речі:
- Не дозволяйте людям зламати сервер
- Коли вони зламають сервер, зможете точно визначити, хто це зробив
Перший з них здійснюється за принципом найменшої привілеї: надавати людям лише ті необхідні їм дозволи, і нічого більше.
Другий - це даючи кожній особі свій власний логін, не дозволяючи спільним входам (наприклад, дозволяти всім використовувати одне і те ж ім’я користувача / пароль), а в ідеалі - перевіряти входи. Ви, мабуть, не зробите цю останню частину одразу, тому що це наче болісно, але давайте поставимо деталі на перше місце, щоб ви могли додати аудит пізніше, коли хтось скине базу даних, і ваш начальник захоче знати, чому.
Я знаю, що ви думаєте: "Але ми кодуємо програми, і для цього потрібен логін". Так, дайте програмі власний логін, і розробники повинні знати цей пароль, але цей логін повинен бути настільки позбавлений дозволів, що ніхто з розумом не захоче ним користуватися. Наприклад, може знадобитися лише в ролях db_datareader та db_datawriter, нічого іншого. Таким чином він може вставляти, оновлювати, видаляти та вибирати дані, але не обов'язково змінювати схеми, додавати індекси, змінювати збережені процедури тощо.
"Це стосується лише виробничих примірників, або ж для наших внутрішніх розробок?"
Я думаю, це так само стосується випадків розвитку, тому що я зазвичай переживаю, щоб люди ламали речі. Люди просто люблять ламати сервери в розвитку. І звичайно, коли настав час скласти список змін для переходу на виробництво, мені потрібно знати, чи дійсно конкретний індекс є життєво важливим для додатка, чи якийсь кістковий голова просто запустив радника з налаштування бази даних і сказав йому застосувати всі зміни . Належний дозвіл дозволяє зменшити біль.