คำถามติดแท็ก audit

การตรวจสอบฐานข้อมูลเกี่ยวข้องกับการสังเกตฐานข้อมูลเพื่อให้ทราบถึงการกระทำของผู้ใช้ฐานข้อมูล

9
ควรจัดการการลบในฐานข้อมูลอย่างไร
ฉันต้องการใช้คุณสมบัติ "ยกเลิกการลบ" ในเว็บแอปพลิเคชันซึ่งผู้ใช้สามารถเปลี่ยนใจและกู้คืนบันทึกที่ถูกลบได้ คิดว่าจะใช้งานอย่างไร ตัวเลือกบางตัวที่ฉันคิดว่าจริง ๆ แล้วเป็นการลบระเบียนที่เป็นปัญหาและจัดเก็บการเปลี่ยนแปลงในตารางตรวจสอบแยกต่างหากหรือไม่ลบระเบียนและใช้คอลัมน์ "ลบ" บูลีนเพื่อทำเครื่องหมายว่าถูกลบ โซลูชันหลังต้องการตรรกะเพิ่มเติมของแอปพลิเคชันเพื่อละเว้นระเบียน "ลบ" ภายใต้สถานการณ์ปกติ แต่จะทำให้ง่ายต่อการใช้การกู้คืนระเบียนในด้านแอปพลิเคชัน

4
วิธีค้นหาว่าใครลบข้อมูล SQL Server บ้าง
เจ้านายของฉันมีแบบสอบถามจากลูกค้าเมื่อวานนี้ถามว่าพวกเขาสามารถค้นหาผู้ที่ลบข้อมูลบางอย่างในฐานข้อมูล SQL Server ของพวกเขา (เป็นรุ่นด่วนหากเรื่องนั้น) ฉันคิดว่าสิ่งนี้สามารถพบได้จากบันทึกธุรกรรม (หากไม่ได้ถูกตัดทอน) - ถูกต้องหรือไม่ และถ้าเป็นเช่นนั้นคุณจะไปหาข้อมูลนี้ได้อย่างไร?


2
วิธีที่ดีที่สุดในการออกแบบฐานข้อมูลและตารางเพื่อเก็บบันทึกการเปลี่ยนแปลง?
ฉันต้องตั้งค่าคุณลักษณะประวัติในโครงการเพื่อติดตามการเปลี่ยนแปลงก่อนหน้านี้ สมมติว่าฉันมีสองตารางตอนนี้: NOTES TABLE (id, userid, submissionid, message) SUBMISSIONS TABLE (id, name, userid, filepath) ตัวอย่าง:ฉันมีแถวในบันทึกย่อและผู้ใช้ต้องการเปลี่ยนข้อความ ฉันต้องการติดตามสถานะก่อนการเปลี่ยนแปลงและหลังการเปลี่ยนแปลง อะไรจะเป็นวิธีที่ดีที่สุดในการตั้งค่าคอลัมน์ในแต่ละตารางเหล่านี้ซึ่งจะบอกว่ารายการนั้นเป็นรายการ "เก่า" 0 ถ้าใช้งานอยู่หรือ 1 ถ้าถูกลบ / มองไม่เห็น ฉันยังต้องการสร้างAUDIT TRAILตารางhistory ( ) ซึ่งเก็บidสถานะก่อนหน้าidของสถานะใหม่ซึ่งตารางนี้ id เหล่านั้นเกี่ยวข้องกับอะไร

1
ฉันสามารถบอกได้ว่าผู้ใดปรับปรุงฐานข้อมูลของฉันจาก v11 เป็น v12 บน Azure เมื่อใดและใครบ้าง
ก่อนหน้านี้วันนี้ฉันสังเกตเห็นว่าเซิร์ฟเวอร์ฐานข้อมูล Azure SQL ทั้งหมดของฉันซึ่งอัปเดตจาก v11 เป็น v12 ฉันเป็นคนเดียวใน บริษัท ของฉันที่ควรจะแตะหมายเลขเหล่านั้น แต่ไม่ใช่คนเดียวใน บริษัท ของฉันที่เข้าถึงได้ เนื่องจากฉันไม่ได้เริ่มต้นการอัปเกรดนี้ฉันต้องการทราบว่าใครทำและเมื่อมีการอัปเดตที่ไม่ได้วางแผนนี้เกิดขึ้น ฉันรู้ว่าฉันสามารถเขียนอีเมลถึงทุกคนใน บริษัท ของฉันด้วยการเข้าถึงขอWTFสำหรับข้อมูลอย่างสุภาพ แต่ฉันควรเริ่มต้นการสนทนาด้วยข้อเท็จจริงให้มากที่สุด นอกจากนี้ฉันมีแนวโน้มที่จะคิดว่านี่เป็น Microsoft / Azure SNAFU เนื่องจากการอัปเกรดเซิร์ฟเวอร์ทั้งหมดรู้สึกว่าจงใจเกินไป

5
ตารางคำสั่งอีคอมเมิร์ซ ประหยัดราคาหรือใช้ตารางการตรวจสอบ / ประวัติ?
ฉันออกแบบคีมาอีคอมเมิร์ซแรกของฉัน ฉันได้อ่านเรื่องนี้มาระยะหนึ่งแล้วและสับสนเล็กน้อยเกี่ยวกับความสัมพันธ์ระหว่างorder_line_itemกับproduct productสามารถรับการสั่งซื้อ มันมีรายละเอียดที่แตกต่างกัน unit_priceแต่ที่สำคัญที่สุดคือ order_line_itemมีคีย์ต่างประเทศไปproduct_idซื้อที่quantityซื้อและunit_priceที่จุดในเวลาลูกค้าที่ซื้อสินค้า สิ่งที่ฉันได้อ่านส่วนใหญ่บอกว่าควรเพิ่มunit_priceon order_line_item(อย่างชัดเจนโดยไม่อ้างอิงผ่านproduct_id) สมเหตุสมผลเนื่องจากร้านค้าสามารถเปลี่ยนแปลงราคาในอนาคตซึ่งจะทำให้การรายงานคำสั่งซื้อการติดตามความสมบูรณ์และอื่น ๆ สิ่งที่ฉันไม่เข้าใจคือทำไมบันทึกโดยตรงunit_priceไปยังค่าorder_line_itemหรือไม่ การสร้างตารางการตรวจสอบ / ประวัติจะเป็นการดีกว่าการสร้างตารางการunit_priceเปลี่ยนแปลงproductหรือไม่? เมื่อมีการorder_line_itemสร้างคีย์ต่างประเทศของproduct_auditตารางจะถูกเพิ่มและสามารถดึงราคา (โดยอ้างอิง) จากที่นั่น ดูเหมือนว่าฉันจะมีข้อดีหลายอย่างในการใช้วิธีนี้ (การทำซ้ำของข้อมูลน้อยลง, ประวัติการเปลี่ยนแปลงราคาเป็นต้น) ดังนั้นทำไมจึงไม่ใช้บ่อยกว่านี้ ฉันยังไม่เจอตัวอย่างของสคีมาอีคอมเมิร์ซที่ใช้วิธีการนี้ฉันทำอะไรหายหรือเปล่า UDPATE: ดูเหมือนว่าคำถามของฉันที่เกี่ยวข้องกับการเปลี่ยนแปลงอย่างช้าๆมิติ ฉันยังคงสับสนอยู่ว่าในขณะที่การเปลี่ยนมิติช้าเกี่ยวข้องกับคลังข้อมูลและ OLAP ดังนั้นชนิดการเปลี่ยนแปลงมิติช้าสามารถนำไปใช้กับฐานข้อมูลธุรกรรมทางธุรกิจหลักของฉัน (OLTP) ได้หรือไม่ ฉันสงสัยว่าฉันกำลังรวมแนวคิดจำนวนมากเข้าด้วยกันหรือไม่

1
จะกรองการใช้ฟังก์ชันที่ผู้ใช้กำหนดเองของ Scalar จากข้อมูลการตรวจสอบเซิร์ฟเวอร์ SQL ได้อย่างไร
เรามีฐานข้อมูล SQL Server ซึ่งมีข้อกำหนดการตรวจสอบฐานข้อมูลที่ตรวจสอบการดำเนินการทั้งหมดในฐานข้อมูล CREATE DATABASE AUDIT SPECIFICATION [dbAudit] FOR SERVER AUDIT [servAudit] ADD (EXECUTE ON DATABASE::[DatabaseName] BY [public]) เราพบว่าแบบสอบถามบางข้อจะเขียนลงในบันทึกการตรวจสอบโดยใช้ฟังก์ชั่นสเกลาร์สำหรับทุกแถวในชุดผลลัพธ์ เมื่อสิ่งนี้เกิดขึ้นบันทึกจะเต็มก่อนที่เราจะสามารถ ETL ลงในที่ซึ่งเป็นสถานที่พักผ่อนขั้นสุดท้ายและเรามีช่องว่างในการบันทึกของเรา น่าเสียดายเนื่องจากเหตุผลด้านความสอดคล้องเราไม่สามารถหยุดการตรวจสอบทุกEXECUTEคำสั่งได้ ความคิดแรกของเราสำหรับแนวทางในการแก้ไขปัญหานี้คือการใช้WHEREข้อในการตรวจสอบเซิร์ฟเวอร์เพื่อกรองกิจกรรม รหัสดูเหมือนว่านี้: WHERE [object_id] not in (Select object_id from sys.objects where type = 'FN' ) น่าเสียดายที่ SQL Server ไม่อนุญาตให้ตัวดำเนินการสัมพันธ์ (อาจเป็นเพราะมันไม่ต้องการสอบถามทุกครั้งที่มีการเขียนไปยังบันทึกการตรวจสอบ) เราต้องการหลีกเลี่ยงการเขียน proc ที่เก็บไว้ซึ่งเป็นรหัสที่ยากobject_idในWHEREข้อ แต่นั่นคือความคิดของเราในปัจจุบันเกี่ยวกับวิธีที่ดีที่สุดในการแก้ไขปัญหานี้ มีวิธีอื่นที่เราควรพิจารณาหรือไม่? เราสังเกตเห็นว่าเมื่อฟังก์ชั่นสเกลาร์ถูกใช้ใน …

3
ค้นหาตัวตนของลูกค้าที่เริ่มสืบค้นใน SQL Server โดยไม่ใช้ทริกเกอร์หรือไม่
ขณะนี้ฉันใช้Change Data Capture (CDC)เพื่อติดตามการเปลี่ยนแปลงข้อมูลและฉันต้องการติดตามชื่อโฮสต์และที่อยู่ IP ของลูกค้าที่ส่งการสอบถามที่ทำการเปลี่ยนแปลง หากมีลูกค้าที่แตกต่างกัน 5 คนลงชื่อเข้าใช้ด้วยชื่อผู้ใช้เดียวกันคนหนึ่งเผชิญกับปัญหาในการติดตามซึ่งหนึ่งในห้านั้นทำการสืบค้น โซลูชันที่กว้างขวางอื่น ๆ ที่ฉันพบรวมถึงการแก้ไขตาราง CDC ด้วยคำสั่งต่อไปนี้: ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) อย่างไรก็ตามสิ่งนี้จะส่งคืนชื่อโฮสต์ของเซิร์ฟเวอร์ที่เปิดใช้งานการสืบค้นไม่ใช่ชื่อโฮสต์ของไคลเอนต์ที่เปิดใช้งานการสอบถาม มีวิธีแก้ไขปัญหานี้หรือไม่? สิ่งที่จะช่วยในการบันทึกชื่อโฮสต์หรือที่อยู่ IP (หรือเอกลักษณ์เฉพาะอื่น ๆ ) ของลูกค้า ฉันไม่ต้องการใช้ทริกเกอร์เนื่องจากมันทำให้ระบบช้าลง CDC ก็สร้างตารางระบบดังนั้นจึงมีทริกเกอร์ที่ไม่สามารถทำได้

3
การส่งข้อมูลเกี่ยวกับผู้ที่ลบระเบียนไปยังทริกเกอร์ลบ
ในการตั้งค่าหลักฐานการตรวจสอบฉันไม่มีปัญหาในการติดตามว่าใครกำลังอัปเดตหรือแทรกระเบียนในตารางอย่างไรก็ตามการติดตามผู้ที่ลบระเบียนดูเหมือนว่าจะมีปัญหามากกว่า ฉันสามารถติดตามส่วนแทรก / อัพเดตได้โดยใส่ในส่วนแทรก / อัปเดตฟิลด์ "UpdatedBy" นี้จะช่วยให้เรียก INSERT / UPDATE ให้มีการเข้าถึงช่อง "UpdatedBy" inserted.UpdatedByผ่านทาง อย่างไรก็ตามด้วยการลบทริกเกอร์ไม่มีข้อมูลถูกแทรก / ปรับปรุง มีวิธีการส่งผ่านข้อมูลไปยังทริกเกอร์การลบเพื่อที่จะได้รู้ว่าใครเป็นผู้ลบบันทึกหรือไม่? นี่คือทริกเกอร์การแทรก / อัปเดต ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate] ON [dbo].[MyTable] FOR INSERT, UPDATE AS INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges) VALUES (inserted.ID, inserted.LastUpdatedBy) FROM inserted ใช้ SQL Server 2012

4
ตรวจสอบการเข้าสู่ระบบในฐานข้อมูล MySQL
มีวิธีตรวจสอบการเข้าสู่ระบบ MySQL หรือไม่ ฉันต้องการที่จะสามารถสร้างชื่อผู้ใช้สำหรับพนักงานแต่ละคนและดังนั้นจึงสร้างเส้นทางการตรวจสอบของการเข้าสู่ระบบ อย่างไรก็ตาม googling กลับไม่ได้ผลลัพธ์ที่ดี ยิ่งเราตรวจสอบได้มากเท่าไหร่ก็ยิ่งดีเท่านั้น อย่างน้อยที่สุดมันก็ดีที่รู้ว่าใครเข้าระบบเมื่อ มันจะดียิ่งขึ้นถ้าดูว่าใครดำเนินการสืบค้นเมื่อใด บันทึกส่วนใหญ่จะมีการบอกลูกค้าว่าเรามีพวกเขาเนื่องจากมีข้อมูลที่อาจอ่อนไหวในฐานข้อมูล เห็นได้ชัดว่าความสามารถในการตรวจสอบแบบสอบถามที่ดำเนินการโดยผู้ใช้แต่ละคน (และเมื่อ) จะทำให้เราสามารถระบุได้ดีขึ้นว่าใครเป็นสาเหตุของปัญหาด้านความปลอดภัยหากควรเกิดขึ้น

1
วิธีรับประวัติการสืบค้นที่ดำเนินการโดยใช้ชื่อผู้ใช้ใน SQL
ฉันสามารถเรียกใช้คิวรีได้โดยใช้: SELECT deqs.last_execution_time AS [Time] ,dest.TEXT AS [Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC แต่ฉันกำลังมองหาusernameคอลัมน์ที่ดำเนินการค้นหาเหล่านี้ด้วย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.