Haliç University, Institute of Science
Department of Management Information Systems
Advanced Database Systems course: Master’s presentation report
Prepared by: Volkan Avşar · Supervisor: Asst. Prof. Dr. Yüksel Bal · Istanbul, 2017
Preface
Views are an essential part of database systems. Instead of working directly on large tables and getting lost in the data, views let us create smaller virtual tables from a large table and run queries, inserts and deletes on them. They are extremely useful virtual tables.
In this study, we look at how these virtual tables are used in a MySQL database, with sample applications and their results. Each topic is reinforced with an example at the end, and we tested these examples so that the subject could be fully understood.
I prepared this study between 2015 and 2017 with the support of the Management Information Systems department of Haliç University. I would like to thank my advisor, Asst. Prof. Dr. Yüksel Bal, for his contributions and support throughout my studies and thesis work, and my fellow master’s student Giray Bal for his help during this work. And of course, my endless thanks go to my family, who have always supported me, watched over me and worked so hard to help me get where I am today.
Abstract
Views are an essential part of database systems: very useful virtual tables that let you build smaller tables from large ones and run queries, inserts and deletes on them, instead of getting lost in the data of a large table.
In this work, we discuss how these virtual tables are used in a MySQL database, with sample applications and their results. Each topic is reinforced with an example, and we tested these examples to make sure the subject is well understood.
We used HeidiSQL as our database editing tool. You can download it from the internet and install it easily. In the presentation, we also cover its setup and view features, showing how to create, insert into and delete from views not only with code but also through shortcuts in the tool.
Keywords: Database, View, MySQL, HeidiSQL, Tables
1. Introduction
1.1. What is a view?
The main purpose of a view is to retrieve a set of data from tables and let us query the result again as if it were a virtual table. In short, in MySQL a view lets us display our data on screen based on the fields and tables we choose. Displaying or reporting data according to what the user needs is easy in MySQL thanks to views.
The database does not store the data produced by a view. Every time a MySQL statement that uses a view runs, the view rebuilds the virtual table. Changes made through a view affect the underlying source tables as well, and the same changes are reflected there. One important reason to use views is the security they provide: for example, when you don’t want all of a table to be visible, you can use a virtual table to hide the rest. Views are also used to simplify complex queries, shorten query times, reduce network traffic, organize access permissions and compare similar data across different servers.
1.2. Creating a view
A view can be created in two ways:
- From the view window in HeidiSQL (since we use HeidiSQL)
- By writing code in the query window
In HeidiSQL, when we click the view tab, we can write our query in the editor area. The results of the query appear on the Data tab, and the views we create are listed on the left side.
1.3. Creating a view with code
You can also create a view by writing a CREATE VIEW statement.
General syntax:
CREATE VIEW view_name AS SELECT * FROM table_name;
The query we used in our example:
CREATE VIEW sonu18denbuyuk AS SELECT * FROM viewornekleri WHERE tckno > 12345678918;
When the query runs, it returns all rows in our table whose national ID number ends in a value greater than 18.
2. View capabilities
2.1. WITH CHECK OPTION
In some cases, when defining a view in MySQL Server, we may have specified a criterion in its body with the WHERE keyword. While using such a view, we can also insert rows into our tables through it. In practice, branches are often given a view to restrict which columns of certain tables they can see in the database, and they are asked to perform all their operations through that view. If a view is created with a WHERE condition, rows will be inserted into tables through that view, and those inserts must only be allowed if they satisfy the WHERE condition, then you need to add the WITH CHECK OPTION clause after the WHERE condition when defining the view. It is very simple to use: just write WITH CHECK OPTION after the WHERE criterion.
For example, if we add WITH CHECK OPTION to the end of the code that returns rows whose ID number ends in a value greater than 18, we can perform INSERT, DELETE and UPDATE operations through this view.
In the next example, we delete the row named “esile” from the “sonu18denbuyuk” view. Alternatively, using INSERT, we can add a row whose name is “hale”. As a result, the new row named “hale” is added both to the view and to the database.
We can also run an UPDATE. The following command changes rows whose name is “Ahmet” to “ahmetdegisti” in the “sonu18denbuyuk” view.
To delete a view, use the DROP statement.
A query like SELECT * FROM view_name returns all the data in the view, so any information we don’t want listed stays hidden. In the next example, we list the records we created earlier whose hometown is Ordu.
When creating a view from a base table, you don’t have to use the same column (field) names as the base table. For example, when creating the view named “farkli isimde view”, we can use “ad” instead of “adi”, “soyad” instead of “soyadi” and “yasi” instead of “yas” from the main table.
In complex queries, when the results of some SELECT statements are used by other SELECT statements, the risk of making mistakes when structuring the query increases. Complex queries can be simplified with views. The basic idea is this: since a view is a virtual table obtained by naming the result of a query, instead of nesting another SELECT inside a complex SELECT, you can name that result as a view and use the view’s name. In some cases, it is also possible to store complex questions that are asked very frequently in a company’s database application as views, and then use those views with simpler statements for the same type of query later.
For example, if we write a view in our “viewornekleri” table made of nested SELECTs and conditions such as:
- tckno greater than 12345678915
- name starts with “b”
- surname starts with “s”
- hometown is Ordu
then the next time, instead of writing these nested SELECT statements again, simply calling the view is enough.
For queries that require a two-step process to obtain information from a table, creating a view in the first step and running the actual query with the help of that view in the second step is often unavoidable. For example, in our “viewornekleri” table we created a separate view for people older than 40, then used this view in another query to calculate the average, giving us the average age of those over 40. Of course, this is a simple example, but there are many more possibilities.
3. Creating users and granting privileges
MySQL commands for creating, authorizing, deleting and listing users, and for viewing privileges, are as follows.
Creating a new user in MySQL:
CREATE USER 'korsan';
If you create a user without a password as above, anyone can access MySQL through the “korsan” user without a password.
This user has not yet been granted privileges on any database, so even if it connects to MySQL, it cannot work on any database. But if you forget to set a password and then grant it privileges on a database, the consequences can be bad.
You can also specify a host parameter for the users you create in MySQL. This setting answers the question “from where (which host) can the user connect?”
- localhost: access only from the machine where MySQL is installed
- %: access from any host
- IP: access only from the IP addresses you specify
Let’s create a user that can only log in to MySQL from the machine MySQL runs on:
CREATE USER 'korsan'@'localhost' IDENTIFIED BY 'powerful_password';
If you create the user like this, you cannot access MySQL remotely with tools such as Navicat or Workbench; you can only access it from that machine.
Now let’s create a user that can access MySQL from outside:
CREATE USER 'korsan'@'%' IDENTIFIED BY 'another_password';
As you can see, we created two different users with the same username but different passwords: one can connect only locally with “powerful_password”, the other from outside with “another_password”.
You can list the users you have created with this query:
SELECT host, user FROM mysql.user;
There are two ways to delete the users you have created:
DROP USER korsan;
If you drop the user this way, you only delete the user created with “%”. Specifying the host, as below, is the safer approach:
DROP USER 'korsan'@'localhost'; DROP USER 'korsan'@'%';
You can also use DELETE instead of DROP, but this is not recommended. In fact, if you DELETE a user and then try to create it again with the same name, you get an error.
DELETE FROM mysql.user WHERE user='korsan'; -- or DELETE FROM mysql.user WHERE user='korsan' AND host='localhost'; DELETE FROM mysql.user WHERE user='korsan' AND host='%';
After creating a user, we need to decide which privileges each user will have on which databases and tables. As with user creation, privileges can be granted per host.
GRANT ALL PRIVILEGES ON korsanDB.* TO 'korsan'@'localhost';
With the syntax above, the “korsan” user, connecting from the local machine, can perform all operations on all tables of the “korsanDB” database (expressed as korsanDB.*).
GRANT SELECT, INSERT, UPDATE, DELETE ON korsanDB.users TO 'korsan'@'%';
With this syntax, the “korsan” user, connecting from an external machine, can only perform SELECT, INSERT, UPDATE and DELETE on the users table of the “korsanDB” database (korsanDB.users). If the user has no password yet, you can set one while granting privileges:
GRANT ALL PRIVILEGES ON korsanDB.* TO 'korsan'@'localhost' IDENTIFIED BY 'password';
To view all privileges assigned to a user, you can use the following syntax:
SHOW GRANTS FOR 'korsan'@'localhost'; SHOW GRANTS FOR 'korsan'@'%';
Don’t forget to set a password when creating or authorizing a new user in MySQL. Use different passwords and different privileges per host. It may seem like a small detail, but it can deter malicious people trying to access your database. Finally, the following syntax can help you create a user quickly and authorize it properly:
CREATE USER 'korsan'@'%'; GRANT ALL PRIVILEGES ON korsanDB.* TO 'korsan'@'%' IDENTIFIED BY 'password'; GRANT UPDATE ON DATABASE1.memleketordu TO 'korsan2'@'localhost';
With the last command, we gave the user permission to update the related view.
REVOKE UPDATE ON database1.memleketordu FROM 'korsan2'@'localhost';
With this command, we remove the update permission.
SHOW GRANTS FOR 'korsan2'@'localhost';
And with this command, we can view the user’s privileges on the database.
Note: This report was written in 2017. In MySQL 8.0 and later, the IDENTIFIED BY clause can no longer be used with GRANT; create the user with a password first (CREATE USER … IDENTIFIED BY …) and then grant privileges.
4. Conclusions
Because working directly on large tables and bulk records in MySQL is demanding in terms of processing load, MySQL allows operations to be carried out through views. Views are used not only in MySQL but also in MS SQL Server and other databases.
Our study showed that views are very easy to use yet have very powerful functions. We supported each topic with examples and aimed to make it easy to understand.
We concluded that views have a wide and frequent range of uses, that anyone working with databases, whether an administrator or a developer, should definitely know them, and that managing and operating databases without views would be difficult.
5. References
- Cem Demir (2016). MySQL için kullanıcı oluşturma ve yetkilendirme. cemdemir.net
- Limon Host (2016). MySQL’de yeni kullanıcı oluşturma ve yetki verme. limonhost.net
- Adveyer.com (2016). MySQL kullanıcı ekleme ve yetki verme. adveyer.com
- Sqlogren.com (2016). MySQL kullanıcı yetkilendirilmesi. sqlogren.com
About the author
Volkan Avşar was born in 1987 and completed his primary and secondary education in Istanbul. He graduated from the Computer Software department of Kadırga Technical High School, and then from Anadolu University (Public Administration) and Istanbul University (Persian Language and Literature). He has worked as an IT manager, IT specialist and consultant at various companies, contributing to server virtualization, help desk operations and processes. He speaks English and Persian. At the time of writing, he was pursuing a master’s degree in Management Information Systems at Haliç University.
MySQL Veritabanında View Kullanımı
T.C.
HALİÇ ÜNİVERSİTESİ
FEN BİLİMLERİ ENSTİTÜSÜ
YÖNETİM BİLİŞİM SİSTEMLERİ ANABİLİM DALI
YÖNETİM BİLİŞİM SİSTEMLERİ PROGRAMI
İLERİ VERİTABANI SİSTEMLERİ DERSİ
MYSQL DATABASE ÜZERİNDE VIEWLAR
YÜKSEK LİSANS SUNUM RAPORU
Hazırlayan
Volkan AVŞAR
Öğretim Üyesi
Yrd. Doç. Dr. Yüksel BAL
İstanbul – 2017
T.C.
HALİÇ ÜNİVERSİTESİ
FEN BİLİMLERİ ENSTİTÜSÜ
YÖNETİM BİLİŞİM SİSTEMLERİ ANABİLİM DALI
YÖNETİM BİLİŞİM SİSTEMLERİ PROGRAMI
İLERİ VERİTABANI SİSTEMLERİ DERSİ
MYSQL DATABASE ÜZERİNDE VIEWLAR
YÜKSEK LİSANS SUNUM RAPORU
Hazırlayan
Volkan AVŞAR
Öğretim Üyesi
Yrd. Doç. Dr. Yüksel BAL
İstanbul – 2017
ÖNSÖZ
Veritabanı sistemlerinin olmazsa olmazı konumunda olan viewlar büyük tablolar üzerinde işlem yapıp bilgi içerisinde kaybolmaktansa büyük tablodan küçük tablolar oluşturup sorgulamalar, eklemeler, çıkarmalar yapmamızı sağlayan oldukça kullanışlı sanal tablolardır.
Bu çalışmamızda bu sanal tabloların MYSQL veritabanı üzerinde kullanımını, örnek uygulamalarını ve sonuçlarını ele aldık. Çalışmamızda anlatılan her konu sonunda bir örnek ile pekiştirdik. Bu örnekleri ise test ederek konunun iyice kavranmasını hedefledik.
Bu çalışmayı 2015-2017 yılları arasında T.C. Haliç Üniversitesi Yönetim Bilişim Sistemleri bölümünün sağladığı katkılar ile hazırlamış bulunuyorum. Eğitimim ve tez çalışmam süresince bana sağladığı katkılardan , verdiği desteklerden dolayı danışmanım Sayın Yrd. Doç. Dr. Yüksel BAL’a teşekkürlerimi bir borç bilirim. Çalışmam süresince bana destek ve yardımcı olan yüksek lisans arkadaşım Giray Bal’a teşekkürlerimi sunarım. Tabii ki tüm hayatım boyunca desteklerini esirgemeyen beni hep gözetip kollayan bugünlere gelmemde büyük emek sarf eden aileme sonsuz teşekkürlerimi sunuyorum.
İstanbul, 2017 Volkan AVŞAR
İÇİNDEKİLER
Sayfa No.
KISALTMALAR IV
ŞEKİLLER VI
TABLOLAR V
ÖZET VII
ABSTRACT VIII
- GİRİŞ 9
1.1. VIEW NEDİR? 9
1.2. VIEW OLUŞTURMA 9
1.3. KODLAMA İLE VİEW OLUŞTURMA 11
2.VIEW YETENEKLERİ ………………………………………………………………….11
2.1. WITH CHECK OPTION 11
3.KULLANICI OLUŞTURMA VE YETKİLENDİRME 194. SONUÇLAR 23
- TARTIŞMA 36
- KAYNAKLAR 37
- EKLER 38
- ÖZGEÇMİŞ 39
KISALTMALAR
Mysql : Veri Tabanı Yönetim Sistemidir.
view : Sanal Tablolar
Syntax : Sözdizimi
TABLOLAR
Sayfa No.
Tablo 1.1. 1
Tablo 1.2. 1
Tablo 1.3. 1
ŞEKİLLER
Sayfa No.
Şekil 1.1. HeidiSql View Oluşturma 10
Şekil 1.2. HeidiSql View Sorgu Yazma 10
Şekil 1.3. HeidiSql View Sorgulama Ekranı 11
Şekil 1.4. View With Check Option 12
Şekil 1.5. View Delete 13
Şekil 1.6. View Insert 14
Şekil 1.7. View Insert 2 14
Şekil 1.8. View Update 14
Şekil 1.9. View Update2 15
Şekil 1.10. Drop View 15
Şekil 1.11. View Listeleme 16
Şekil 1.12. Farklı İsimde View 16
Şekil 1.13. Farklı İsimde View Sorgu Ekranı 17
Şekil 1.14. View Çağırma 18
Şekil 1.15. View Sorgu İçinde Kullanma 18
Şekil 1.16. View Sorgu İçinde Kullanma 2 19
Şekil 1.17. MySql Userlar 20
GENEL BİLGİLER
Adı ve Soyadı : Volkan AVŞAR
Anabilim Dalı : Yönetim Bilişim Sistemleri
Programı : Yönetim Bilişim Sistemleri
Sunum Danışmanı : Yrd. Doç. Dr. Yüksel BAL
Sunum Türü ve Tarihi : Sunum Raporu – Ocak 2017
ÖZET
MYSQL VERİTABANI ÜZERİNDE VİEWLAR
Veritabanı sistemlerinin olmazsa olmazı konumunda olan viewlar büyük tablolar üzerinde işlem yapıp bilgi içerisinde kaybolmaktansa büyük tablodan küçük tablolar oluşturup sorgulamalar, eklemeler, çıkarmalar yapmamızı sağlayan oldukça kullanışlı sanal tablolardır.
Bu çalışmamızda bu sanal tabloların MYSQL veritabanı üzerinde kullanımını, örnek uygulamalarını ve sonuçlarını ele aldık. Çalışmamızda anlatılan her konu sonunda bir örnek ile pekiştirdik. Bu örnekleri ise test ederek konunun iyice kavranmasını hedefledik.
Çalışmamız sırasında veritabanı düzenleme programı olarak “Heidi SQL” programı kullandık bu programı internet üzerinden bilgisayarınıza indirip kolayca kurabilirsiniz. Sunum içerisinde bu programın kurulumu ve view yeteneklerine de değinerek sadece kodlama ile değil kısa yollar ile de view oluşturma, ekleme, çıkarma konusunu pekiştirmeye çalıştık.
Anahtar Kelimeler: Veritabanı, View, Mysql, Database, HeidiSql, Tablolar
GENERAL INFORMATION
Name and Surname : Volkan AVŞAR
Field : Management Information Systems
Program : Management Information Systems
Supervisor : Yrd. Doç. Dr. Yüksel BAL
Degree Awarded and Date : Master of Science – January 2017
ABSTRACT
MYSQL VIEWS
Views that are essential for database systems are very useful virtual tables that allow you to create small tables and query, join, and subtract large tables if you are working on large tables and getting lost in the information.
In this work, we discussed the use of these virtual tables on the MYSQL database, their sample applications and their results. At the end of each topic discussed in our work, we strengthened with an example. By testing these examples, we aimed to grasp the subject well.
We use “Heidi SQL” program as a database editing program during our work. You can download this program via internet and easily install it. We tried to reinforce the idea of creating, adding and subtracting views, not only by coding but also by short ways, by mentioning the setup and view capabilities of this program in the presentation.
Keywords: Database, View, Mysql, Database, HeidiSql, Tables
1.GİRİŞ
1.1. VIEW NEDİR?
Temel amacı tabloların içerisinden veri kümesi getirip ortaya çıkan sonucu sanal tabloymuş gibi yeniden sorgulayabilmemizi sağlamaktır. Kısaca MySQL’de verilerimizin isteğe bağlı alanlara ve tablolara göre ekranımızda görüntüleme işlemi yapmamızı sağlar. Kullanıcının istediği verilere göre gösterim yapmak veya raporlamak MySQL’de VIEW sayesinde kolaylıkla halledilmektedir.
Veritabanı VIEW ile oluşan datayı saklamaz. Bir VIEW geçen MySQL deyimi her çalıştırıldığında ilgili VIEW sanal tabloyu yeniden oluşturur. VIEW üzerinde yapılan değişikler kendilerini oluşturan kaynak tabloları da etkiler ve aynı değişiklikler kaynak tablolara da yansır. VIEW kullanmanın önemli nedenlerinden bir tanesi sağladığı güvenliktir. Örneğin tablolarınızın tamamının görünmesini istemediğiniz zamanlarda sanal tablo kullanıp tablolarınızın tamamının görünmesini engelleyebilirsiniz. Karmaşık sorguları basitleştirmek, sorgu süresini kısaltmak ve ağ üzerindeki trafiği düşürmek, erişim izinlerini düzenlemek ve farklı sunuculardaki benzer verileri karşılaştırmak içinde kullanılır.
1.2. VIEW OLUŞTURMA
View iki şekilde oluşturulur:
1- Heidi MySQL kullandığımız için Heidi MySQL görünüm penceresinden
2- Sorgu penceresinden kod yazarak
Heidi SQL’de view oluşturma penceresi aşağıdaki gibidir.
Şekil 1.1. HeidiSql View Oluşturma
Görünüm sekmesine tıkladığımızda aşağıdaki alana sorgumuzu yazabiliyoruz.
Şekil 1.2. HeidiSql View Sorgu Yazma
Sorgumuzdan çıkan sonuçları Heidi MySQL üzerinde veri sekmesinde görebilmekteyiz. Oluşturulan view tabloları sol tarafta bulunmakta.
Şekil 1.3 HeidiSql View Sorguları Ekranı
1.3. KODLAMA İLE VIEW OLUŞTURMA
VIEW oluşturmak için sorguya CREATE VIEW ifadesi de yazılabilir
Genel Yapısı:
“CREATE VIEW view_adı AS SELECT * FROM tablo_adi”
Örneğimizde kullandığımız sorgu
“CREATE VIEW sonu18denbuyukASSELECT * FROM viewornekleriWHERE tckno > 12345678918”
Sorgu çalıştığında bize tablomuzdan tckimlik numaralarının sonu on sekizden büyük olan tüm sütunları getirdi.
2.VIEW YETENEKLERİ
2.1. WITH CHECK OPTION
MySQL Server’da bazı durumlarda, “view” nesnelerini tanımlarken, gövdesinde “where” anahtar sözcüğüyle bir kriter belirtmiş olabiliriz. Böyle bir “view” nesnesini kullanırken de “view” üzerinden tablolarımıza “insert” işlemi gerçekleştirebiliriz. Genelde piyasada şubelere, veritabanında bazı tabloların bazı kolonlarını görme kısıtlaması getirmek için, bir “view” verilir. Şube ne gibi bir işlem yapmak isterse bu “view” üzerinden gerçekleştirmesi istenir. İşte arkadaşlar eğer bir “view” nesnesi oluşturulurken “where” koşulu kullanılmışsa, o “view” üzerinden tablolara bir “insert” işlemi gerçekleştirilecekse ve bu “insert” işleminin sadece “where” koşuluna göre gerçekleşmesi isteniyorsa, “view” nesnesini tanımlarken “where” koşulundan sonra “with check option” parametresini kullanmak gerekir. Çok basit bir kullanımı vardır. “Where” kriterinden sonra “with check option” yazılır.
Örnek olarak tablomuzda tckimlik numarası son 18 den büyük olan satırları getirdiğimiz kodun sonun “with check option” eklersek bu view içerisinde “INSERT, DELETE,UPDATE ” işlemleri gerçekleştirebiliriz.
Şekil 1.4. View With Check Option
Aşağıdaki örnekte de “sonu18denbuyuk” viewinde “esile” isimli satırı siliyoruz.
Şekil 1.5. View Delete
Veya yine insert seçeneği ile adi hale olan bir satır ekleyebiliriz.
Şekil 1.6. View Insert
Sonuç olarak hem view içerisinde hem de databasemiz de hale isimli yeni bir satır eklendi.
Şekil 1.7 View Insert 2
Veya Update ile güncelleme işlemi yapabiliriz. Aşağıdaki komut sonu18denbuyuk olan viewi içerisinde adi Ahmet olan satırları adi ahmetdegisti olarak değiştirir.
Şekil 1.8. View Update
Sonuç aşağıdaki gibi olacaktır.
Şekil 1.9. View Update2
Viewleri silmek için DROP ifadesi kullanılır.
Şekil 1.10 Drop View
“select * from viewadi” şeklinde olursa viewdeki dataların hepsi ekrana gelecektir. Böylelikle listelenmesini istemediğimiz bilgiler gizlenecektir. Aşağıdaki örnekte daha önceden oluşturduğumuz memleketi ordu olan kayıtları listeliyoruz.
Şekil 1.11 View Listeleme
Bir temel tablodan bir view oluşturulurken, temel tablodaki aynı sütun (alan) isimlerini kullanmak zorunda değildir. Örneğin, farklı isimli view adli viewi oluştururken ana tablodaki adi yerin ad, soyadi yerine soyad , yas yerine yasi kullanılarak aşağıdaki şekilde viewlar oluşturulabilir.
Şekil 1.12 Farklı İsimde View
Sorgunun çıktısı aşağıdaki gibi olacaktır.
Şekil 1.13 Farklı İsimde View Sorgu Ekranı
Karmaşık sorgulamalarda, bazı SELECT komutlarının sonuçları diğer SELECT komutlarınca kullanıldığında, sorgulamanın düzenlenmesinde yanlışlıklar yapma olasılığı artar. Karmaşık sorgulamalar, VIEW özelliği kullanılarak daha basit hale getirilebilir. Burada temel fikir şudur: Madem ki bir view, bir sorgulama sonucu elde edilen bilgiyi (tabloyu) isimlendirerek elde edilen bir virtüel tablodur; o halde karmaşık SELECT komutu içinde, sonucu kullanılacak başka bir SELECT komutu kullanmak yerine, bu sonucu bir view olarak isimlendirerek, view adını kullanmak. Bazı durumlarda ise, işletmenin veri tabanı uygulamasında çok sık olarak sorulan karmaşık soruları bir view yapısı içinde saklayarak, daha sonra aynı tip sorgulamalar için bu view yapısını kullanarak daha basit ifadeler kullanmakta olasıdır.
Örneğin viewornekleri tablomuzun içinde iç içe selectler ve şartlardan oluşan;
tckno : 12345678915 den büyük olsun
adi: b ile başlasın
Soyadi: s ile başlasın
Memleketi: ordu olsun
Viewini yazdığımızda bir dahaki sefere iç içe bu select komutlarını yazmak yerine viewi çağırmak yeterli olacaktır.
Şekil 1.14 View Çağırma
Bir tablodan elde edilecek bilgiler için, iki kademeli işlem gerektiren sorgulamalarda, ilk adımda bir view oluşturup ikinci adımda esas sorgulamayı bu view yardımı ile gerçekleştirmek, çoğu kez kaçınılmaz bir durumdur. Aşağıdaki soru ve bunun çözümü olan SQL ifadeleri bu konuda bir fikir verecektir:
Örnek olarak viewornekleri tablomuzda yaşı 40’dan büyük olanlar için ayrı bir view oluşturduk sonra bu viewi kullanıp başka bir sorgulamalarda bu viewin ortalamasını aldık böylelikle yaşı 40 dan büyük olanların yaş ortalamasını elde ettik tabii ki bu basit bir örnek oldu ancak örnekler çoğaltılabilir.
Şekil 1.15 View Sorgu İçinde Kullanma
Şekil 1.16 View Sorgu içinde Kullanma 2
3.KULLANICI OLUŞTURMA VE YETKİLENDİRME
Kullanıcı oluşturma, yetkilendirme, silme ve kullanıcıları görüntüleme ile yetkileri görüntüleme gibi MySQL komutları aşağıdaki gibidir.
MySQL’de Yeni Kullanıcı Oluşturma:
“CREATE USER ‘korsan’’;”
Yukarıdaki gibi şifre belirtmeden bir kullanıcı oluşturursanız, herhangi biri ‘korsan’ kullanıcısı üzerinden şifre belirtmeksizin MySQL’e erişebilir durumda olacaktır.
Bu kullanıcıya henüz herhangi bir veri tabanı üzerinde yetki verilmedi. Dolayısıyla MySQL’e bağlanmış olsa bile veri tabanları üzerinde işlem yapamayacaktır. Bu kullanıcıya şifre vermeyi unuttuktan sonra, bir veri tabanı üzerinde yetki verirseniz sonuçlar kötü olabilir.
MySQL’de oluşturacağınız kullanıcılar için host parametresi de verebilirsiniz. Bu ayar “kullanıcı nereden (hosttan) bağlanabilir” sorusunun cevabıdır.
Localhost: Sadece MySQL’in bulunduğu makineden erişilir.
%: Sadece dışarıdan erişilir.
IP: Sadece sizin belirlediğiniz IP’lerden erişilir.
Sadece MySQL’in bulunduğu makineden MySQL’e giriş yapabilen bir kullanıcı oluşturalım:
“CREATE USER ‘korsan’@’localhost’ IDENTIFIED BY ‘powerful_password’;”
Şekil 1.17 Mysql Userlar
Kullanıcıyı yukarıdaki gibi oluşturursanız Navicat, Workbench gibi programlar kullanarak MySQL’e dışardan erişemezsiniz. Sadece o makineden MySQL’e erişebilirsiniz.
Sadece dışarıdan MySQL’e erişebilen bir kullanıcı oluşturalım:
“CREATE USER ‘korsan’@’%’ IDENTIFIED BY ‘another_password’;”
Gördüğünüz üzere, kullanıcı adları aynı olan şifreleri farklı olan 2 farklı kullanıcı oluşturduk. Birisi “powerful_password” şifresi ile sadece içeriden, diğeri ise “another_password” şifresi ile sadece dışarıdan erişebilir durumdadır.
Oluşturduğunuz kullanıcıları şu sorgu ile görüntüleyebilirsiniz:
“SELECT host, user FROM mysql.user;”
Gördüğünüz üzere, kullanıcı adları aynı olan şifreleri farklı olan 2 farklı kullanıcı oluşturduk. Birisi “powerful_password” şifresi ile sadece içeriden, diğeri ise “another_password” şifresi ile sadece dışarıdan erişebilir durumdadır.
Oluşturduğunuz kullanıcıları silmek için 2 farklı yol kullanabilirsiniz:
“DROP USER korsan;”
Kullanıcıyı drop ederseniz sadece % ile oluşturulan kullanıcıyı silmiş olursunuz. Aşağıdaki gibi bir kullanım daha sağlıklı olacaktır.
“DROP USER ‘korsan’@’localhost’;”
“DROP USER ‘korsan’@’%’;”
DROP yerine DELETE’de kullanabilirsiniz. Lakin bu tavsiye edilen bir yol değil.
Zaten bir kullanıcıyı DELETE edip tekrar aynı isimle yaratmaya çalıştığınızda hata oluşuyor.
“DELETE FROM mysql.user WHERE user=’korsan’”
— veya
“DELETE FROM mysql.user WHERE user=’korsan’ AND host=’localhost’;”
“DELETE FROM mysql.user WHERE user=’korsan’ AND host=’%’;”
Kullanıcı oluşturduktan sonra, hangi kullanıcınının hangi veri tabanı ve tablolar üzerinde hangi yetkilere sahip olacaklarını belirlememiz gerekiyor.
Kullanıcı oluştururken yaptığımız gibi yine hosta göre yetkilendirme yapabiliyoruz.
“GRANT ALL PRIVILEGES ON korsanDB.* TO ‘korsan’@’localhost’;”
Yukarıdaki syntax ile “korsan” kullanıcısı “local makineden bağlanarak”, “korsanDB” veri tabanının tüm tablolarında (korsanDB.* ile ifade ediliyor) tüm işlemleri yapabilir.
“GRANT SELECT, INSERT, UPDATE, DELETE ON korsanDB.users TO ‘korsan’@’%’;”
Bu syntax ile “korsan” kullanıcısı “dışarıdaki bir makineden bağlanarak”, “korsanDB” veri tabanının tüm users tablosunda (korsanDB.users) sadece “SELECT, INSERT, UPDATE, DELETE” işlemlerini yapabilir. Yetkilendirme işlemlerini yaparken kullanıcının şifresi yoksa aşağıdaki gibi şifre de oluşturabilirsiniz.
“GRANT ALL PRIVILEGES ON korsanDB.* TO ‘korsan’@’localhost’ IDENTIFIED BY ‘password’;”
Ayrıca, bir kullanıcıya atanmış tüm yetkileri görüntülemek için aşağıdaki syntaxı kullanabilirsiniz.
“SHOW GRANTS FOR ‘korsan’@’localhost’;”
“SHOW GRANTS FOR ‘korsan’@’%’;”
MySQL’de yeni bir kullanıcı oluştururken veya yetkilendirirken şifresini belirlemeyi unutmayınız. Hostlara göre farklı şifreler veriniz. Hostlara göre farklı yetkiler belirleyiniz. Bu ufak bir detay olarak görünür fakat veri tabanına erişmek isteyen kötü niyetli insanları caydırabilir. Son olarak, en hızlı şekilde bir kullanıcı oluşturmak ve düzgün bir şekilde yetkilendirmek için aşağıdaki syntax işinize yarayabilir.
“CREATE USER ‘korsan’@’%’;”
“GRANT ALL PRIVILEGES ON korsanDB.* TO ‘korsan’@’%’ IDENTIFIED BY ‘password’;”
“GRANT UPDATE ON DATABASE1.memleketordu TO ‘korsan2’@’localhost’;”
Yukarıdaki komut ile oluşturduğumuz kullanıcıya ilgili view üzerinde update edebilme yetkisi verdik.
“REVOKE UPDATE ON database1.memleketordu FROM ‘korsan2’@’localhost’;”
Yukarıdaki komut ile de update yetkisini siliyoruz.
“show grants for ‘korsan2’@’localhost’;”
Komut ile de ilgili kullanıcının database üzerindeki haklarını görüntüleyebiliriz.
4.SONUÇLAR
MYSQL üzerinde tablolar işlem yükü açısından ve yığın kayıtlar üzerinde işlem yapılması oldukça zor olduğundan viewlar üzerinden işlem yapılmaya izin vermektedir. Viewlar sadece MYSQL de değil MSSQL de ve diğer veritabanlarında da kullanım alanları bulunmaktadır.
İncelememiz sonunda viewların çok kolay kullanımına karşın çok etkin işlevleri olduğu sonucuna vardık. Her konunun sonunda örneklerle o konuyu genişçe destekledik ve konuyu kavramaya çalıştık.
Çalışmamız sonucunda viewların geniş ve sık kullanım alanı bulunduğu ve database ile çalışan bir kişinin veya geliştiricinin mutlaka viewları bilmesi gerektiği , view kullanılmadan yönetilmeye çalışan databaselerde yönetim ve işletmenin zor olacağı kanaatine varılmıştır.
5.KAYNAKLAR
Elektronik Makale ve Yayınlar
- Cem Demir (2016). MYSQL için kullanıcı oluşturma ve yetkilendirme, http://www.cemdemir.net/veri-tabani/mysql-icin-kullanici-olusturma-ve-dogru-yetkilendirme
- Limon Host, (2016). MYSqlde yeni kullanıcı oluşturma ve yetki verme, https://www.limonhost.net/makaleler/nasil-yaparim/mysql-de-yeni-kullanici-olusturma-ve-yetki-verme/7
- Adyever.com (2016). MYSQL de kullanıcı oluşturma ve yetkilendirme, https://www.adveyer.com/blog/mysql-kullanici-ekleme-ve-yetki-verme/
- Sqlogren.com (2016). MYSQL de kullanıcı oluşturma ve yetkilendirme, http://www.sqlogren.com/mysql-kullanici-yetkilendirilmesi-mysql-database-veritabani-olusturma-ve-kullaniciya-yetki-vermeselectinsertupdatedeletedropcreaterevoke-izinleri-root-izin
- ÖZGEÇMİŞ
Volkan Avşar. 1987 yılında doğdu. İlk ve ortaöğrenimini İstanbul’da tamamladı. Kadırga Teknik Lisesi Bilgisayar Yazılım bölümünden mezun oldu sonra sırasıyla Anadolu Üniversitesi Kamu Yönetimi ve İstanbul Üniversitesi Fars Dili ve Edebiyatı bölümlerini bitirdi. Çeşitli firmalarda bilgi sistemleri yöneticiliği ve bilgi sistemleri uzmanlığı ve danışmanlığı yaptı. Danışmanlığını verdiği firmalarda sunucu sanallaştırma, yardım masası faaliyetleri ve süreçlerine katkılarda bulundu. İngilizce, Farsça bilmektedir. Son olarak Haliç Üniversitesi Yönetim Bilişim Sistemleri bölümü yüksek lisans programına devam etmektedir.


4 Comments
HarveySlori
January 04, 2025 at 03:22Hello.
Good luck 🙂
JeromeLon
January 26, 2025 at 19:42Hello. I would like to buy advertising on your site. Write to me
Richardsheax
February 07, 2025 at 08:17Im fine
XRumerTest
March 08, 2025 at 00:22Hello. And Bye.