MS SQL: viewd on teie sõbrad…

märts 28, 2019

Arusaamatul põhjusel inimesed kardavad view’sid. Võin öelda, et olles MS SQL andmebaasiga sõber alates 2000 aastast juba, ütlen view’d on teie sõbrad. Toon ühe lihtsa näite, mida mina kasutanud. Viewd sai mitu probleemi lahendatud:

  1. Kasutajad ei pääse otse ühelegi tabelile ligi, kõik toimub läbi view’de. Õigused omistate vaid viewle !

  2. Viewdes saab where lauses piirata kirjete nähtavust õigustega. MSSQL lubab viewd kasutada kui “tabelit” kui view genereeritud stiilis (ei tohi olla select osas teiste tabelite välju !) SELECT minutabel.* FROM minutabel JOIN Osakonnad  o ON o.id = minutabel.osakondid AND o.tootajalogin = suser_name()

  3. Viewdes saab kuvada vaid nö live kirjeid, üheski natukene tõsisemas süsteemis reaalselt kirjeid ei kustutata. Põhjus lihtne, kui mingi probleem, saab läbi kustutatud kirjete näha, mida on korda saadetud. Stiilis … WHERE kustutatud = 0

Koheselt tuleb saalis köhatus, aga mis siis juhtub, kui lähtetabelisse tekivad uued väljad, view ju neid ei kuva. Ärge muretsege: lihtsalt üks väike lisaliigutus, ei pea VIEW’d droppima ja uuesti looma. Viimase tegevusega kaoks ka kõik õigused.

Vaid üks käsk: sp_refreshview supervaade_vw

Panen siia ka koodinäite:

CREATE TABLE tmp_kasutaja
(
id INTEGER NOT NULL IDENTITY(1,1) PRIMARY KEY,
eesnimi VARCHAR(35),
pereknimi VARCHAR(35),
lisajaid INTEGER,
lisatudkp DATETIME,
muutjaid INTEGER,
muudetudkp DATETIME,
kustutajaid INTEGER,
kustutatudkp DATETIME,
kustutatud BIT
)

 

CREATE VIEW tmp_kasutaja_vw
AS
SELECT * FROM tmp_kasutaja WHERE kustutatud = 0

Kuna kustutamine pole kunagi hea mõte, sest tihti kasutajatel tekib kollektiivne mäluauk ja alati infosüsteemid süüdi. Siis sellised kirjete logid stiilis, et kustutatud kirje reaalselt ei kustu ja muutja ning lisaja salvestatakse, see tegevus parandab tihti kollektiivset mäluauku.  Nii mõnelegi kasutajale järsku tuleb meelde, jaaa ma vist kustutasin midagi.  Teine variant teha tervilik auditlogi, kus igasugust muutmist logitakse, aga tihti ka sellisest “lihtsast” auditlogist täiesti piisab (kes muutis, kes lisas, kes kustutas).

Selleks teeme ühe toreda INSTED OF TRIGGERI

CREATE TRIGGER tmp_kasutaja_upt_del_trg ON dbo.tmp_kasutaja INSTEAD OF DELETE
AS
BEGIN

DECLARE @tootajaid INT;

SET NOCOUNT ON;
SELECT @tootajaid = id
FROM Tootaja
WHERE login = SUSER_NAME()

UPDATE t
SET kustutatud=1, kustutajaid=@tootajaid, kustutatudkp=GETDATE()
FROM tmp_kasutaja t
INNER JOIN deleted d ON
t.id = d.id

END

 

CREATE TRIGGER tmp_kasutaja_upt_trg on tmp_kasutaja
FOR UPDATE, INSERT
AS
BEGIN
DECLARE @tootajaid INT;

SET NOCOUNT ON;
SELECT @tootajaid = id
FROM Tootaja
WHERE login = SUSER_NAME()

IF EXISTS(SELECT * FROM DELETED)
BEGIN
IF UPDATE(kustutatud) return
UPDATE t
SET muutjaid=@tootajaid, muudetudkp=GETDATE()
FROM tmp_kasutaja t
INNER JOIN DELETED d ON
d.id = t.id
END ELSE
BEGIN
UPDATE t
SET lisajaid=@tootajaid, lisatudkp=GETDATE()
FROM tmp_kasutaja t
INNER JOIN INSERTED i ON
i.id = t.id
END
END

 

Advertisements

PostgreSQL kontrollige alati public rolli õigusi

märts 7, 2019

Nooremprogrammeerijatele ei tohi kunagi anda admin õigusi, selle tõestuseks oli üks firma, kus avastasin, et GRANT ALL oli publicule antud. Siis kui küsisid, et miks te nii tegite, aga Googles oli mingi rida selline. Peale seda kahjuks pidin 10 minutit pead vastu lauda taguma ja mõtlema, mida koolides õpetatakse. Normaalne õiguste haldus käib nii, et tehakse Group role’d ja õigusi juhitakse läbi selle rolli.

Esmalt tehke enda baasis päring, vaadake üle, mis publicul lubatud

SELECT grantee, privilege_type ,table_name
FROM information_schema.role_table_grants
WHERE grantee = ‘PUBLIC’ and table_name NOT LIKE ‘pg_%’

Ja sequence õigused saate järgneva päringuga:

SELECT cl.oid, relname, pg_get_userbyid(relowner) AS seqowner, relacl, description,
(SELECT array_agg(label) FROM pg_seclabels sl1 WHERE sl1.objoid=cl.oid) AS labels,
(SELECT array_agg(provider) FROM pg_seclabels sl2 WHERE sl2.objoid=cl.oid) AS providers
FROM pg_class cl
LEFT OUTER JOIN pg_description des ON (des.objoid=cl.oid AND des.classoid=’pg_class’::regclass)
WHERE relkind = ‘S’
ORDER BY relname

Mina antud juhul eemaldasin publicult õigusi ükshaaval, et saaks vaadata kas mõni noorem programmeerijate süsteem kukub kokku või mitte:

REVOKE TRUNCATE ON ALL TABLES IN SCHEMA public FROM public;
REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM public;
REVOKE UPDATE ON ALL TABLES IN SCHEMA public FROM public;
REVOKE INSERT ON ALL TABLES IN SCHEMA public FROM public;
REVOKE REFERENCES ON ALL TABLES IN SCHEMA public FROM public;
REVOKE TRIGGER ON ALL TABLES IN SCHEMA public FROM public;
REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM public;

Normaalses maailma tehakse nö Group role töötajatele

CREATE ROLE tootajate_roll NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

https://www.postgresql.org/docs/9.1/sql-grant.html

Aga siin peate ise otsustama, mis tegevusi töötaja roll tegelikkuses tohiks teha ja võimalik,
osade tabelite õigusi pärast eraldi muuta rollis. See lihtsalt näide

GRANT INSERT,SELECT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO tootajate_roll;

Raspberry mikroarvuti ja külmataluvus…

november 30, 2018

Järjest enam tellitakse minult erinevaid automaatikalahendusi Raspberry peale ja loomulikult on ka suure ringi küsimus, kuidas Raspberry õues käitub. Võin teile rahulikult kinnitada, et -21 kraadi pole ka probleeme.

Aga peate täitma eeldused, Raspberry kindlasti panna suuremasse veekindlasse karpi ja soovitan panna ülemisse ossa. Juhul kui mingit moodi ongi kondens sisse saanud, siis see vedelik vajub alla. Samuti suurem kinnine karp aitab ja soojusel siiski hajuda.Kõik karbi kaablisisendid silikoonige ära.

Kuna mälukaardid võivad siiski hakata väga suurte miinuskraadidega tõrkuma, siis kindlasti panna Industrial SD Memory Cards tüüpi kaart.

MSSQL and ramdrive (ImDisk ), bad idea…

juuli 26, 2018

I woke up in the morning and tried to optimize my MSSQL server. Simple optimization; since tempdb has quite a lot of traffic, I decided to move it to ramdrive.

USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = ‘Z:\SQLData\tempdb.mdf’);
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = ‘Z:\SQLLog\templog.ldf’);
GO

AND this was a major failure…SQL server won’t start.

“An unexpected error occurred while checking the sector size for the file ‘Z:\tempdb\tempdb.mdf’. Move the file to a local NTFS volume, where the sector size can be retrieved. Check the SQL Server error log for more information.”

To start SQL server and restore previous tempdb location. Step one: unmount ramdrive disk (Z:). Step two: mount USB stick with letter Z:. Then restart SQL server and restore tempdb paths.

Taasavastasin enda jaoks Opera veebisirvija (no – ads rokib)

oktoober 26, 2016

operabenchmarkKuna reklaame topitakse tänapäeval arutult sisse, siis veebilehtede laadimine võtab isegikiire ühendusega juba aega ning arvuti CPU saab kõvasti vatti.

Opera download link

Nüüd ka AdBlock ja teised läinud marketingi teed, kus osad firmad saavad …läbida sealt ostes endale nö turvalise reklaami teenuse sealt. Ehk need reklaamiblokeerijad pole enam usaldusväärsed.

Kõige rohkem meeldiski Opera native adblock (ehk sirvijas saab kohe reklaame peita), lahe ka ta kuvab statistika, kaua läheb lehe laadimine koos reklaamidega ja ilma…

Self made tuulegeneka staatori ja rootori “upgrade”

juuli 25, 2016

Seekord pikka teksti ei kirjuta, varasem kirjutis on siin http://www.stiigo.com/ideed/generaator/generaator_osa1.htm

Vahel ikka hea igapäevase programmeerimise kõrvalt midagi muud teha, sest siis saab aju ka 99% tööle panna 😛

Rootoris: N52 klassiga magnetid, üldiselt tehke mida tahate, aga ärge neid magneteid omavahel kokku laske, sest siis võivad peened killud näkku lennata. Staatoris 1.6mm mähisetraat ja EPOt kasutatud. Rootoris kasutatud polüestervaiku, millesse lisatud talki, et tugevust juurde anda, samuti et kuivamisel ei kuumeneks üle. Talgiga see asi, et selle võiks enne atsetoonis ära lahustada.

IMG_0031

IMG_0033

IMG_0034

IMG_0039

IMG_0040

IMG_0042

IMG_0045

IMG_0081

IMG_0082

IMG_0084

MSSQL: aeglaste päringute tuvastamine

juuni 8, 2016

Vahel on palju tööd, et leida päringud, mis SQL serverit mõttetult koormavad, SQL trace pole ka alati parim abivahend.
Antud päring aitab aeglaselt jooksvad päringud tuvastada.

SELECT TOP 50
[Average CPU used] = total_worker_time / qs.execution_count,
[Total CPU used] = total_worker_time,
[Execution count] = qs.execution_count,
[Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END –
qs.statement_start_offset)/2)
,[Parent Query] = qt.text
,DatabaseName = DB_NAME(qt.dbid)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Average CPU used] DESC;

Win 10 + Ubuntu = Winux

märts 31, 2016

Huvitav kas varsti saab Ubuntule mõeldud custom binareid jooksutada Windowsi peal (Winuxi peal) 🙂

http://fossbytes.com/ubuntu-linux-on-windows-10-here-are-pictures-screenshots/

Heh… MS SQL server töötab nüüd ka Linuxil

märts 8, 2016

Announcing SQL Server on Linux

https://blogs.microsoft.com/blog/2016/03/07/announcing-sql-server-on-linux/

Postimehe kommentaariumis IP jälle “avalikult” nähtav

veebruar 25, 2016

Kaotati ära anonüümsed kommentaarid, okei…enamasti minu “tarbimisharjumus” oli neid lugeda, mitte isegi niipalju artikleid ja neid sõimu kommentaare lihtsalt ei märganud või nende reiting muudeti nii madalaks, et need kadusid ära. Julgen arvata, et selline sõnavabaduse piiramine mõjub ka otseselt reklaamikäibele.

Mõneti naljakas, et käib selline sõnavabaduse piiramine, eriti kus Euroopa Liidu kohtu pretsedent olemas, et portaal / leht ei vastuta sealsete kommentaaride avalikustamise eest.

News sites not liable for ’insulting and rude’ reader comments, says ECHR

Aastaid tarkvaraarenduses olles on tekkinud rumal komme numbrites näha mingeid andmeid või seost: sisetunne ütles, et vaata korra Firefoxis (Firebugi -> Net) tabis selle Postimehe kommentaariumi JSON vastust …parrot.php väljundit.

Saaks aru, et ma pole sellest rääkinud: 2012 juba teavitasin neid, see viga parandati, nüüd jälle täpselt sama asi tehtud.

https://tingmarprog.wordpress.com/2012/06/05/postimehe-uus-kommentaarium-voimalik-saada-katte-kommenteerija-ip/

Kui IP’d jsonis hoiate, tehke vähemalt mingi hash sellest, aga mitte nii, et seda saavad kõik lugeda. Muutun kurjaks, kui näen sama vea kordamist.

Võtke kommentaaride json lahti, huvi pakub meile tag “tsa” ning sealne nimistu ja sellest esimene numbriline osa (int), teine osa vist mingi md5 räsi.

…”tsa\”:{\”1384334536_ea9e51b8f445250e4c373631cf3953f7

Kirjutame ühe imelise rea käsureale:

tracert 1384334536

ja saame kenasti nimelahenduse, kindlasti põnev näha, mis firmadest kommenteeritakse 😉

Vähendame Windows 10 … “nuhkimisvajadust”

veebruar 10, 2016

Vaatasin, et GitHubis tekkinud projekt, mis võimaldab läbi GUI keelata ära Windowsi featureid, mis tihti on kaheldava väärtusega.

https://github.com/10se1ucgo/DisableWinTracking

AdBlock pole enam usaldusväärne…

oktoober 4, 2015

AdBlock Extension has been Sold to an ‘Unknown Buyer’
http://thehackernews.com/2015/10/adblock-extension.html

Windows 10 Raspberry Pi 2 jaoks …

august 12, 2015

..paistab, et peab hakkama katsetama 😉

http://ms-iot.github.io/content/en-US/Downloads.htm

MSSQL: no-break space ja trim funktsioon

mai 31, 2015

Nii üle pika astusin ämbisse, eeldasin et MS SQL LTRIM / RTRIM suudab ka “no break space” tüüpi tühikud eemaldada (koodiga U+00A0). Tõde see, et ei eemalda…

DECLARE @p NVARCHAR(255)
SET @p = REPLICATE(CHAR(160),16) + 'Tekst' + REPLICATE(CHAR(160),16)
SET @p = RTRIM(LTRIM(@p))
SELECT @p

Antud juhul aitab vaid replace :)

SELECT REPLACE(@p,CHAR(160),'')

Hoiatus mälupulk võib olla vägagi ebameeldiv…teie arvutile

mai 6, 2015

Vaatasin Eesti IT (turvalisuse)maastik kuidagi vajunud rahulikku unne, tekkis mõte, et ehk tutvustaks teadmist, kus saab teada, tavaline mälupulk võib olla ebameeldivalt ohtlik. Tavalises IT foorumis sellest rääkida pole eriti kasu, sealsed teadmised / arutelud ei jõua suure massini (tavakasutajad) kes ei aimagi, et selline asi võimalik.

BadUSB ohtlikkus (2014. a avalikustatud http://www.zdnet.com/article/badusb-big-bad-usb-security-problems-ahead/) on Eestis kuidagi hirmus vähe tähelepanu pälvinud.

Inimesed ei ole sellest turvaohust teadlikud, samuti puudub teadlikkus firmadel.

Lool oleks kaks aspekti:

* esiteks tundmatuid USB mälupulkasid mitte kasutada!
* teiseks ühte reaalselt rünnakut tutvustada.

Sai sportlikust huvist koostatud üks selline USB pulk BadUsb modifikatsiooniga, mis peale arvutisse sisestamist 10 sekundi jooksul tõmbab alla netist keylogger’i, mis püüab ID-kaardi (https://tingmarprog.wordpress.com/2014/11/13/id-kaart-windows-pole-pin-pad-lugejat-paha-idee/) paroole ning käivitab selle. Koheselt kõik katsed ei õnnestunud, 3 USB pulka … muutusid “kiviks”, enne kui töötava ver. sain. Uskuge, see töötav versioon tekitab kõhedust lausa 🙂

Kui RIA tooks kasti head veini laenutaksin selle USB pulga demode jaoks välja 😉

Uskuge mind sellised “spetsiaalse” USB mälupulga koostamiseks ei pea te raketiteadlane olema. Ärge muretsege, BadUSB töötab ka Linuxi ja Maci’ga

idcardsniff2

Ostate mälupulga, kuhu andmeid salvestada, ühendate arvutiga, võtate väikese kohvi ja avastate, et mälupulk on teie arvuti üle võtnud. Tegemist on USB-arhitektuuri probleemiga, mida ei saa lahendada lihtsalt.

Sisuliselt on kirjutatud spetsiaaltarkvara USB-pulgale, mis hakkab arvutisse ise käske tippima (mälupulk tutvustab ennast kui klaviatuur). Ka e-sigareti võib selliseks pahalaseks ümber teha – nagu laadima panete, võetakse teie arvuti üle.

Kunagi CD-de puhul oli autorun’i võimalus: panid CD lugejasse ja kohe tõmmati sealt mõni programm tööle. Aga turvariske mõistes hakati enne küsima, kas tõesti soovid käivitada autorun’i.

Seda autorun-omadust ei eelda keegi aga tavalise mälupulga puhul, mida peaks kasutama justkui andmete salvestamiseks. Samas on võimalused, kuidas mälupulga abil kahju teha, piiritud: erinevatest troojakate installeerimine, failide krüpteerimine kettal või kustutamine.

Asja saab viia palju kaugemale. Mitte just ammu olid meil valimised ja ID-kaart asendamatu vahend e-valimistel.

Nüüd võtame järgmise ründevektori: kasutades inimlikku käitumist, kui midagi saab tasuta, siis krabame…

Tuleb teha N + 1 sellist USB-mälupulka, mille maksumus pole suur. Seejärel võtame usaldusväärse välimusega nännijagajad, kelle paneme neid – näiteks erakonna logoga – USB-pulkasid nö õigele sihtgrupile jagama. Jagamise võiks ajastada ca 4-5 nädalat enne valimisi. Või unustada neid USB-pulkasid näiteks ülikoolidesse.

Kui see mälupulk arvutiga ühendada, tõmbab USB-le paigaldatud muudetud riistvara Windowsi arvutisse pahavara, mis hakkab ID-kaardi paroole nuhkima, kogub andmeid, vajadusel paigaldab arvutisse kaughalduse tarkvara. Kui õigel hetkel õiged inimesed käivitavad kaughalduse või automatiseeritud robotid, on neil võimalik paroole ära kasutades valida “õige kandidaat”.

Kas sellisel ründel oleks mõtet?
Poliitika on väga räpane, iga “õige” kandidaat võib ise summa välja käia, et riigikokku saada.

Samamoodi saaks ID-kaardi PIN-koode nuhkides teha kaughaldusega pangaülekandeid jne.

Kui nüüd turvaspetsid võtavad välja ärakedratud plaadi teemal “teil peab olema uusim viirusetõrje”, siis esiteks need definitsioonid jõuaks liiga hilja viirusetõrjujateni, kui rünnak õigesti korraldada. Teiseks istub pahavara sisuliselt USB-riistvaras, teda ei saagi sealt ära kustutada.

See lugu on hoiatuseks, mida saab soovi ja väikeste oskuste korral teha. Ärge uskuge “tasuta” asjadesse. Kui ID-kaarti ei kasuta, võtke ta ID-kaardi lugejast välja! Loodetavasti tuleb aeg, kus meil on juba varem lubatud PIN-pad lugejad, millel mõistlik hind ja mille riistvara ka toetatud.