Ekim 19, 2021
11 11 11 ÖÖ
TCP nedir ? Aktarım Katmanı 2
Aktarım Katmanı Tcp Nedir
Yönlendirme Nedir 2 ?
Yönlendirme Nedir ?
Ağ Katmanı Nedir 2 ?
Ağ Katmanı Nedir ?
Veri Bağı Katmanı Nedir 2 ?
Android Studio Nasıl Kurulur ?
Veri Bağı Katmanı Nedir ?
Fiziksel Katman Nedir ?
Son Yazılar
TCP nedir ? Aktarım Katmanı 2 Aktarım Katmanı Tcp Nedir Yönlendirme Nedir 2 ? Yönlendirme Nedir ? Ağ Katmanı Nedir 2 ? Ağ Katmanı Nedir ? Veri Bağı Katmanı Nedir 2 ? Android Studio Nasıl Kurulur ? Veri Bağı Katmanı Nedir ? Fiziksel Katman Nedir ?
İleri Seviye SQL

İleri Seviye SQL

Paylaşım , Takip İçin

İleri seviye SQL konusuna geçmeden önce veri tabanı konularına bakmanızı öneririm. Aşağıdaki linkten veya yukardaki veri tabanı konularından bakmanız ve öğrenmeniz gerekmektedir. İleri seviye SQL komutları aşağıdadır.

FOREIGN KEY KISITI

CREATE TABLE child_table

(

  column1 datatype [ NULL | NOT NULL ],

  column2 datatype [ NULL | NOT NULL ],

  …

  CONSTRAINT fk_name

    FOREIGN KEY (child_col1)

    REFERENCES parent_table (parent_col1)

    ON DELETE CASCADE

    [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

);

UNION (BİRLEŞİM)

SELECT Txn_Date FROM Store_Information
UNION
SELECT
Txn_Date FROM Internet_Sales;

INTERSECT (KESİŞİM)

SELECT Txn_Date FROM Store_Information
INTERSECT
SELECT
Txn_Date FROM Internet_Sales;

MINUS (FARK)

SELECT Txn_Date FROM Store_Information
MINUS
SELECT
Txn_Date FROM Internet_Sales;

SQL LIMIT

İleri Seviye SQL

SELECT Store_Name, Sales, Txn_Date
FROM
Store_Information
ORDER BY Sales DESC
LIMIT 2;

İleri Seviye SQL

SQL InlIne vIew

CREATE TABLE User_Higher_Than_200 
SELECT
User_ID, SUM(Score) FROM User_Score 
GROUP BY
User_ID 
HAVING SUM(Score) > 200;

SQL Subquery

SELECT “column_name1”
FROM “table_name1”
WHERE “column_name2” [Comparison Operator]
(SELECT “column_name3”
FROM “table_name2”
WHERE “condition”);

Subquery Örnek

İleri Seviye SQL

SELECT SUM (Sales) FROM Store_Information
WHERE
Store_Name IN
(SELECT Store_Name FROM Geography
WHERE
Region_Name = ‘West’);

SQL Exists

İleri Seviye SQL

SELECT SUM(Sales) FROM Store_Information
WHERE EXISTS
(SELECT * FROM Geography
WHERE
Region_Name = ‘West’);

SQL Case

SELECT CASE (“column_name“) 
  WHEN “value1” THEN “result1” 
  WHEN “value2” THEN “result2” 
  … 
  [ELSE “
resultN“] 
  END
FROM “
table_name“;

SQL Case - Örnek

İleri Seviye SQL

SELECT Store_Name, CASE Store_Name
  WHEN ‘Los Angeles’ THEN Sales * 2
  WHEN ‘San Diego’ THEN Sales * 1.5
  ELSE Sales
  END
“New Sales”,
Txn_Date
FROM
Store_Information;

SQL Searched Case - Örnek

İleri Seviye SQL

SELECT Store_Name, Txn_Date, CASE
  WHEN Sales >= 1000 THEN ‘Good Day’
  WHEN Sales >= 500 THEN ‘OK Day’
  ELSE ‘Bad Day’
  END
“Sales Status”
FROM
Store_Information;

AUTO_INCREMENT (otomatik artan)

  • Otomatik artan alanlar şöyle tanımlanır:

CREATE TABLE TABLE_NAME 
(PRIMARY_KEY_COLUMN INT NOT NULL AUTO_INCREMENT 
… 
PRIMARY KEY (PRIMARY_KEY_COLUMN
));

  • Örnek;

CREATE TABLE USER_TABLE 
(
Userid int NOT NULL AUTO_INCREMENT, 
Last_Name varchar(50), 
First_Name varchar(50), 
PRIMARY KEY (
Userid));

  • Veri girişi

INSERT INTO USER_TABLE VALUES (‘Perry’, ‘Jonathan’);

SQL Fonksiyonları

SQL Function – Açıklama

AVG – Kolonun ortalamasını alır 

COUNT – Kayıt sayısını verir

MAX – Kolonun maksimum değerini verir 

MIN – Kolonun minimum değerini verir

SUM – Kolonun toplamını verir

ROUND – Kolon değerini yuvarlar

Tarih verileri ve sql

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

  • Metinlerde olduğu gibi tırnak işareti içerisinde verilir. Sadece formatı tarih formatındadır.

Tarihlerle çalışırken metinlerle çalıştığımız gibi tek tırnakları kullanırız.

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

SQL Enjeksiyonu

SQL enjeksiyon, veri tabanınızı tahrip edebilecek bir kod enjeksiyon tekniğidir.

SQL enjeksiyonu en yaygın web hackleme tekniklerinden biridir.

SQL Injection, kötü amaçlı kodun SQL ifadelerine web sayfası girişi yoluyla yerleştirilmesidir.

Web Sayfalarında SQL

SQL enjeksiyonu genellikle bir kullanıcıdan kullanıcı adı / kullanıcı kimliği gibi bir giriş yapmasını istediğinizde ve bir ad / id yerine kullanıcı size bilmeden veri tabanında çalıştıracağınız bir SQL ifadesi verir .

Seçme dizesine bir değişken (txtUserId) ekleyerek bir SELECT ifadesi oluşturan aşağıdaki örneğe bakın. Değişken kullanıcı girdisinden alınır (getRequestString):

Örnek

txtUserId = getRequestString(“UserId”);
txtSQL = “SELECT * FROM Users WHERE UserId = ” + txtUserId;

Bu bölümün geri kalanında, SQL deyimlerinde kullanıcı girdisi kullanmanın olası tehlikeleri açıklanmaktadır.

1 = 1’e Dayalı SQL Enjeksiyonu Her Zaman Doğru

Yukarıdaki örneğe tekrar bakın. Kodun asıl amacı, belirli bir kullanıcı kimliği ile bir kullanıcıyı seçmek için bir SQL ifadesi oluşturmaktı.

Bir kullanıcının “yanlış” giriş yapmasını engelleyecek bir şey yoksa, kullanıcı şöyle bir “akıllı” giriş yapabilir:

Kullanıcı kimliği: 

Sonra, SQL deyimi şöyle görünecek:

SELECT * FROM Users WHERE UserId = 105 OR 1=1;

Yukarıdaki SQL geçerlidir ve OR 1 = 1 her zaman DOĞRU olduğundan TÜM satırları “Kullanıcılar” tablosundan döndürür.

Yukarıdaki örnek tehlikeli görünüyor mu? Ya “Kullanıcılar” tablosu isimleri ve şifreleri içeriyorsa?

Yukarıdaki SQL deyimi bununla aynıdır:

SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;

Bir bilgisayar korsanı, bir veri tabanındaki tüm kullanıcı adlarına ve şifrelerine giriş alanına sadece 105 VEYA = 1 ekleyerek erişebilir.

“” = “” Tabanlı SQL Enjeksiyonu Her Zaman Doğru

İşte bir web sitesinde kullanıcı girişi örneği:

Kullanıcı adı:

Parola:

Örnek

uName = getRequestString(“username”);
uPass = getRequestString(“userpassword”);

sql = ‘SELECT * FROM Users WHERE Name =”‘ + uName + ‘” AND Pass =”‘ + uPass + ‘”‘

Sonuç

SELECT * FROM Users WHERE Name =”John Doe” AND Pass =”myPass”

Bir bilgisayar korsanı, kullanıcı adına veya şifre metin kutusuna “OR” “=” ekleyerek veritabanındaki kullanıcı adlarına ve şifrelere erişebilir:

Kullanıcı adı:

Parola:

Sunucudaki kod şöyle bir geçerli SQL ifadesi oluşturur:

Sonuç

SELECT * FROM Users WHERE Name =”” or “”=”” AND Pass =”” or “”=””

Yukarıdaki SQL geçerlidir ve OR “” = “” her zaman TRUE olduğundan tüm satırları “Kullanıcılar” tablosundan döndürür.

Toplu SQL İfadelerine Dayalı SQL Enjeksiyonu 

Çoğu veritabanı toplu SQL deyimini destekler.

Bir grup SQL ifadesi, noktalı virgüllerle ayrılmış iki veya daha fazla SQL ifadesinden oluşan bir gruptur.

Aşağıdaki SQL ifadesi, “Kullanıcılar” tablosundaki tüm satırları döndürür, ardından “Tedarikçiler” tablosunu siler.

Örnek

SELECT * FROM Users; DROP TABLE Suppliers

Aşağıdaki örneğe bakın:

Örnek

txtUserId = getRequestString(“UserId”);
txtSQL = “SELECT * FROM Users WHERE UserId = ” + txtUserId;

Ve aşağıdaki giriş:

Kullanıcı kimliği: 

Geçerli SQL deyimi şöyle görünür:

Sonuç

SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;

Koruma için SQL Parametrelerini Kullan

Bir web sitesini SQL enjeksiyonundan korumak için SQL parametrelerini kullanabilirsiniz.

SQL parametreleri, yürütme zamanında bir SQL sorgusuna kontrollü bir şekilde eklenen değerlerdir.

ASP.NET Razor Örneği

txtUserId = getRequestString(“UserId”);
txtSQL = “SELECT * FROM Users WHERE UserId = @0”;
db.Execute(txtSQL,txtUserId);

Parametrelerin SQL ifadesinde bir @ işaretleyici ile temsil edildiğini unutmayın.

SQL motoru, sütununun doğru olup olmadığından ve yürütülecek SQL’in bir parçası olarak tam anlamıyla ele alınmadığından emin olmak için her parametreyi kontrol eder.

Başka bir örnek

txtNam = getRequestString(“CustomerName”);
txtAdd = getRequestString(“Address”);
txtCit = getRequestString(“City”);
txtSQL = “INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)”;
db.Execute(txtSQL,txtNam,txtAdd,txtCit);

Örnekler

Aşağıdaki örnekler, bazı yaygın web dillerinde parametreli hale getirilmiş sorguların nasıl oluşturulduğunu gösterir.

ASP.NET’TE SEÇİM TABLOSU:

txtUserId = getRequestString(“UserId”);
sql = “SELECT * FROM Customers WHERE CustomerId = @0”;
command = new SqlCommand(sql);
command.Parameters.AddWithValue(“@0”,txtUserID);
command.ExecuteReader();

ASP.NET’teki BİLDİRİME INSERT:

txtNam = getRequestString(“CustomerName”);
txtAdd = getRequestString(“Address”);
txtCit = getRequestString(“City”);
txtSQL = “INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)”;
command = new SqlCommand(txtSQL);
command.Parameters.AddWithValue(“@0”,txtNam);
command.Parameters.AddWithValue(“@1”,txtAdd);
command.Parameters.AddWithValue(“@2”,txtCit);
command.ExecuteNonQuery();

PHP BİLDİRİMİNE INSERT:

$stmt = $dbh->prepare(“INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)”);
$stmt->bindParam(‘:nam’, $txtNam);
$stmt->bindParam(‘:add’, $txtAdd);
$stmt->bindParam(‘:cit’, $txtCit);
$stmt->execute();

İleri seviye SQL Dili konusundan Bir önceki veri tabanı konusuna geçmek için — Tıklayınız


Paylaşım , Takip İçin
0 0 votes
Article Rating

Bir Cevap Yazın

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
HAYALİNDEKİ YAZILIM
%d blogcu bunu beğendi: