SQL'de Kullanıcılar ve Rolleri için Erişim Denetimleri

Güvenlik, hayati önemdeki iş verilerinin gigabaytlarını yetkisiz kişilerden ve kendi yetkilerini aşmaya çalışan içeriden gelen gözlerden uzak tutmak isteyen veritabanı yöneticileri için çok önemlidir. Tüm ilişkisel veritabanı yönetim sistemleri , bu tehditleri en aza indirecek şekilde tasarlanmış bir çeşit iç güvenlik mekanizması sağlar. Bunlar, Microsoft Access tarafından sunulan basit parola korumasından, Oracle ve Microsoft SQL Server gibi gelişmiş ilişkisel veritabanları tarafından desteklenen karmaşık kullanıcı / rol yapısı arasında değişir. Bu makalede, Yapılandırılmış Sorgu Dili'ni (veya SQL ) uygulayan tüm veritabanları için ortak güvenlik mekanizmaları üzerinde duruluyor. Birlikte, veri erişim kontrollerini güçlendirmek ve verilerinizin güvenliğini sağlamak için süreç boyunca yürüyeceğiz.

Kullanıcılar

Sunucu tabanlı veritabanları, bilgisayar işletim sistemlerinde kullanılanlara benzer bir kullanıcı konseptini destekler. Microsoft Windows NT ve Windows 2000'de bulunan kullanıcı / grup hiyerarşisine aşina iseniz, SQL Server ve Oracle tarafından desteklenen kullanıcı / rol gruplarının çok benzer olduğunu görürsünüz.

Veritabanınıza erişecek her kişi için bireysel veritabanı kullanıcı hesapları oluşturmanız önemle tavsiye edilir. Kullanıcılar arasında hesap paylaşmak ya da veritabanınıza erişmesi gereken her kullanıcı türü için sadece bir kullanıcı hesabı kullanmak teknik olarak mümkündür, ancak bu uygulamayı iki nedenden dolayı şiddetle tavsiye ederim. Birincisi, bireysel hesap verebilirliği ortadan kaldıracaktır - eğer bir kullanıcı veritabanınızda bir değişiklik yaparsa (kendinize 5,000 dolarlık bir artış vererek), denetim günlüklerinin kullanımıyla belirli bir kişiye geri izleyemezsiniz. Ayrıca, belirli bir kullanıcı kuruluşunuzdan ayrılırsa ve veritabanından erişimini kaldırmak isterseniz, tüm kullanıcıların güveneceği şifreyi değiştirmek zorunda kalırsınız.

Kullanıcı hesaplarını oluşturma yöntemleri platformdan platforma değişir ve kesin prosedür için DBMS'ye özel belgelerinize başvurmanız gerekir. Microsoft SQL Server kullanıcıları, sp_adduser saklı yordamının kullanımını araştırmalıdır. Oracle veritabanı yöneticileri CREATE USER komutunu faydalı bulacaktır. Alternatif kimlik doğrulama şemalarını da araştırmak isteyebilirsiniz. Örneğin, Microsoft SQL Server, Windows NT Entegre Güvenlik kullanımını destekler. Bu şema altında, kullanıcılar veritabanına Windows NT kullanıcı hesaplarıyla tanımlanır ve veritabanına erişmek için ek bir kullanıcı kimliği ve parola girmesi gerekmez. Bu yaklaşım veritabanı yöneticileri arasında oldukça popülerdir çünkü hesap yönetiminin yükünü ağ yönetim personeline kaydırır ve son kullanıcıya tek bir oturum açma kolaylığı sağlar.

Roller

Az sayıda kullanıcı içeren bir ortamda bulunuyorsanız, büyük olasılıkla kullanıcı hesapları oluşturmanın ve onlara doğrudan izin atamanın ihtiyaçlarınız için yeterli olduğunu göreceksiniz. Ancak, çok sayıda kullanıcınız varsa, büyük olasılıkla hesapların tutulması ve uygun izinlerin yükü bunalmış olacaktır. Bu yükü hafifletmek için ilişkisel veri tabanları rol kavramını desteklemektedir. Veritabanı rolleri, Windows NT gruplarına benzer şekilde çalışır. Kullanıcı hesapları rol (ler) e atanır ve izinler bireysel kullanıcı hesaplarından ziyade bir bütün olarak rolüne atanır. Örneğin, bir DBA rolü oluşturabilir ve daha sonra bu rol için idari personelimizin kullanıcı hesaplarını ekleyebiliriz. Bunu yaptıktan sonra, yalnızca rolün iznini atayarak tüm mevcut (ve gelecekteki) yöneticilere belirli bir izin atayabiliriz. Bir kez daha, rol oluşturma prosedürleri platformdan platforma değişir. MS SQL Server yöneticileri, sp_addrole saklı yordamını araştırmalı, Oracle DBA'lar CREATE ROLE sözdizimini kullanmalıdır.

İzin Verme

Artık kullanıcıları veritabanımıza ekledik, izinleri ekleyerek güvenliği güçlendirmeye başlama zamanı. İlk adımımız, kullanıcılarımıza uygun veritabanı izinleri vermektir. Bunu, SQL GRANT ifadesinin kullanımıyla gerçekleştireceğiz.

İşte ifadenin sözdizimi:

GRANT
[ON

]
TO
[GRANT SEÇENEK]

Şimdi, bu ifadeye satırlık bir göz atalım. İlk satır olan GRANT , verdiğimiz belirli tablo izinlerini belirtmemize olanak tanır. Bunlar, tablo düzeyindeki izinler (SELECT, INSERT, UPDATE ve DELETE gibi) veya veritabanı izinleri (CREATE TABLE, ALTER DATABASE ve GRANT gibi) olabilir. Tek bir GRANT ifadesinde birden fazla izin verilebilir, ancak tablo düzeyinde izinler ve veritabanı düzeyinde izinler tek bir bildirimde birleştirilemez.

İkinci satır,

, tablo düzeyindeki izinler için etkilenen tabloyu belirtmek için kullanılır. Veritabanı düzeyinde izinler veriyorsak bu satır atlanır. Üçüncü satır, izin verilen kullanıcı veya rolü belirtir.

Son olarak, DAHA FAZLA SEÇENEKLE, dördüncü satır, isteğe bağlıdır. Bu satırın ifadeye eklenmesi durumunda, etkilenen kullanıcının da diğer kullanıcılara aynı izinleri vermesine izin verilir. İzinler bir role atandığında WITH GRANT OPTION öğesinin belirtilemeyeceğini unutmayın.

Örnekler

Birkaç örneğe bakalım. İlk senaryomuzda, son zamanlarda müşteri kayıtlarını ekleyecek ve koruyacak bir grup 42 veri girişi operatörü işe aldık. Müşteriler tablosundaki bilgilere erişebilmeleri, bu bilgileri değiştirebilmeleri ve tabloya yeni kayıtlar ekleyebilmeleri gerekir. Veritabanından bir kaydı tamamen silmemelidirler. İlk olarak, her operatör için kullanıcı hesapları oluşturmalı ve ardından hepsini DataEntry'ye yeni bir role eklemeliyiz. Daha sonra, onlara uygun izinleri vermek için aşağıdaki SQL deyimini kullanmalıyız:

GRANT SELECT, INSERT, GÜNCELLEME
Müşteriler
DataEntry'ye

Ve hepsi bu kadar var! Şimdi veritabanı düzeyinde izinler atandığımız bir durumu inceleyelim. DBA rolünün üyelerine veritabanımıza yeni tablolar eklemelerine izin vermek istiyoruz. Ayrıca, diğer kullanıcıların aynı şeyi yapmalarına izin verebilmelerini istiyoruz. İşte SQL ifadesi:

GRANT CREATE TABLE
DBA'ya
GRANT SEÇENEĞİ İLE

DBA'larımızın bu izni diğer kullanıcılara atamasını sağlamak için WITH GRANT OPTION satırını eklediğimize dikkat edin.

İzinleri Kaldırma

İzinleri verdikten sonra, bunları daha sonraki bir tarihte iptal etmenin genellikle gerekli olduğunu kanıtlar. Neyse ki, SQL bize daha önce verilen izinleri kaldırmak için REVOKE komutuyla bize sağlar. İşte sözdizimi:

REVOKE [GRANT SEÇENEĞİ]
ON


FROM

Bu komutun sözdiziminin GRANT komutununkiyle benzer olduğunu fark edeceksiniz. Tek fark, komutun sonunda değil, REVOKE komut satırında GRANT SEÇENEĞİ belirtilmiş olmasıdır. Örnek olarak, Mary'nin daha önce Müşteriler veritabanından kayıtları kaldırmak için daha önceden izin verilen izni iptal etmek istediğimizi düşünelim. Aşağıdaki komutu kullanırdık:

REVOKE DELETE
Müşteriler
Mary'den

Ve hepsi bu kadar var! Microsoft SQL Server tarafından desteklenen ve denemeye değer bir mekanizma daha var: DENY komutu. Bu komut, bir kullanıcı için geçerli veya gelecekteki bir rol üyeliğinden geçirebilecekleri bir izni açıkça reddetmek için kullanılabilir. İşte sözdizimi:

DENY
ON


TO

Örnekler

Önceki örneğimize dönersek, Mary'nin aynı zamanda Müşteriler tablosuna erişimi olan Yöneticiler rolünün bir üyesi olduğunu hayal edelim. Önceki REVOKE ifadesi masasına erişimi reddetmek için yeterli olmayacaktır. Kullanıcı hesabını hedefleyen bir GRANT bildirimi aracılığıyla kendisine verilen izni kaldıracak, ancak Yöneticiler rolünde üyeliği yoluyla kazanılan izinleri etkilemeyecektir. Bununla birlikte, bir DENY ifadesi kullanırsak, iznin mirasını engelleyecektir. İşte buyruk:

DENY DELETE
Müşteriler
Mary'ye

DENY komutu esas olarak veritabanı erişim denetimlerinde bir "olumsuz izin" oluşturur. Daha sonra, Müşteriler tablosundaki satırları kaldırmak için Mary'ye izin vermeyi kararlaştırırsak, GRANT komutunu kullanamazız. Bu komut, mevcut DENY tarafından derhal geçersiz kılınacaktır. Bunun yerine, negatif izin girdisini aşağıdaki gibi kaldırmak için ilk önce REVOKE komutunu kullanırız:

REVOKE DELETE
Müşteriler
Mary'den

Bu komutun, pozitif bir izni kaldırmak için kullanılanla tamamen aynı olduğunu fark edeceksiniz. DENY ve GRANT komutlarının her ikisinin de benzer bir şekilde çalıştığını unutmayın * mdash; her ikisi de veritabanı erişim kontrol mekanizmasında izinler (pozitif veya negatif) oluştururlar. REVOKE komutu belirtilen kullanıcı için tüm olumlu ve olumsuz izinleri kaldırır. Bu komut verildikten sonra, Mary, bu izne sahip bir rolün üyesiyse, tablodaki satırları silebilir. Alternatif olarak, DELETE izni doğrudan hesabına vermek için bir GRANT komutu verilebilir.

Bu yazı boyunca, Standart Sorgu Dili tarafından desteklenen erişim kontrol mekanizmaları hakkında iyi bir şeyler öğrendiniz. Bu giriş size iyi bir başlangıç ​​noktası sağlamalıdır, ancak sisteminizin desteklediği gelişmiş güvenlik önlemlerini öğrenmek için DBMS belgelerinize başvurmanızı tavsiye ederim. Birçok veritabanının , belirli sütunlarda izin verme gibi daha gelişmiş erişim denetimi mekanizmalarını desteklediğini göreceksiniz.