reede, 5. oktoober 2012

MERGE käsuga puuduvate ridade lisamine tabelmuutujasse

On selline tabelmuutuja
DECLARE @tulem TABLE ( WORKER NVARCHAR(40) COLLATE DATABASE_DEFAULT, HOUSES_GROUPS_ID INT, TOTAL INT DEFAULT 0) ja esialgne päring annab tabeli sisuks
aga vaja näidata ka puuduolevaid 0 ridu, ehk saada selline tulemus

ehk lisame KAMPUS_OLLE-le puudu oleva HOUSES_GROUPS_ID 42 korral koguse 0

MERGE lause võib olla selline:


MERGE @tulem AS Target
    USING ( SELECT DISTINCT WK.WORKER, HG.HOUSES_GROUPS_ID FROM @tulem WK CROSS APPLY ( SELECT DISTINCT HOUSES_GROUPS_ID    FROM @tulem ) AS HG
       ) AS Source (WORKER, HOUSES_GROUPS_ID) ON (Target.HOUSES_GROUPS_ID = Source.HOUSES_GROUPS_ID AND Target.WORKER = Source.WORKER)
        WHEN NOT MATCHED BY TARGET THEN
            INSERT (HOUSES_GROUPS_ID, WORKER) VALUES (Source.HOUSES_GROUPS_ID, Source.WORKER);


Sisemine päring MERGE lauses:
SELECT DISTINCT WK.WORKER, HG.HOUSES_GROUPS_ID FROM @tulem WK CROSS APPLY ( SELECT DISTINCT HOUSES_GROUPS_ID FROM @tulem ) AS HG

annab WORKER ja HOUSES_GROUPS_ID ristkorrutise


ja sealt mestib WHEN NOT MATCHED puuduolevad lisaks algsesse tabelisse.
Kuna @tulem TOTAL INT DEFAULT 0 vaikeväärtus on 0 pannakse see ka vaikimisi puuduvatele väärtuseks




kolmapäev, 26. september 2012

Firefox 15.0.1 ja Eesti ID-kaart

Peale Firefoxi uuendamist ei pruugi ID-kaart enam töötada.
Näiteks pillub viga Veakood: ssl_error_handshake_failure_alert

Taas käima saamiseks kontrolli menüüst
Tööriistad -> Lisad -> Laiendused menüüst üle, et "Estonian ID- card PKCS 11 module loader" oleks lubatud


esmaspäev, 24. september 2012

trace.axd piirangu reegel UrlScani jaoks

trace.axd on fail mida võib pärida, et saada infot ASP.NET veebirakenduse parameetrite ja muutujate kohta.

Igaks juhuks võib UrlScan-iga trace.axd pärimise tõkestada et vältida selle pahatahtlikku kasutamist.
Reeglistik koosneks urlscan.ini failis järgmistest komponentidest :

RuleListi kaasame uue lisatava KeelatudAxd reegli

RuleList=SQLSystimine,XSSSystimine,KeelatudAxd

KeelatudAxd reeglis määrame ära, et skaneerime Url-ipealt ning mõjub *.axd failidele ja viitame AxdKeelatud nimekirjale


;reegel *.axd failide jaoks
[KeelatudAxd]
AppliesTo=.axd
DenyDataSection=AxdKeelatud
ScanUrl=1
DenyUnescapedPercent=1


DenyDataSection nimekirjas loetleme ülesse axd failid mille poole pöördumise keelame
;ei luba pärida trace.axd faili
[AxdKeelatud]
trace.axd


UrlScan logifailis näeb trace.axd faili poole pöördumise tõkestamine välja niimoodi

GET /trace.axd Rejected rule+'KeelatudAxd'+triggered URL - trace.axd

kolmapäev, 12. september 2012

SQL SERVER SELECT päringu parametriseeritud järjestamine erinevate andmetüüpide korral

Andmebaasi tabelis on väli text_id INT tüüpi ja title_text NVARCHAR(1000).
Kui nüüd vaja salvestatud protseduuris parameetrina ette anda mis järjestuses andmeid kätte saada tahetakse


ALTER PROCEDURE [dbo].[TEXT_ROLES_KUIDO_S]
    @sortorder TINYINT=0 --0 NIME JÄRGI 1-ID JÄRGI
AS
BEGIN
SET NOCOUNT ON
   SELECT [text_id],[title_text] FROM [dbo].[TEXT_TITLES]
            ORDER BY CASE WHEN @sortorder = 0 THEN title_text ELSE text_id END
END

siis selline lähenemine annab veateate @sortorder = 0 korral

Conversion failed when converting the nvarchar value 'Mingi tekst' to data type int.

kuna title_text-i hakatake INT andmetüübiks pöörama. Veast saab lahti, kui ORDER BY kirjutada järgmiselt

   SELECT [text_id],[title_text] FROM [dbo].[TEXT_TITLES]
      ORDER BY CASE WHEN @sortorder = 0 THEN title_text END ,
                     CASE WHEN @sortorder = 1 THEN text_id END

SQL SERVER XML andmetüübi pööramine VARCHAR(MAX)

Kui XML andmetüübi pööramisel VARCHAR(MAX) võib hakata pilduma viga

Conversion of one or more characters from XML to target collation impossible

DECLARE @tulem VARCHAR(MAX), @xmlMuutuja
SET @xmlMuutuja= ... Mingi XML tüüpi väärtus

Viga ilmneb järgneval tüübiteisendamisel
SET @tulem=CAST(@xmlMuutuja AS VARCHAR(MAX))

siis veast saab lahti kui kõigepealt pöörata NVARCHAR(MAX) ja peale seda VARCHAR(MAX)

SET @tulem=CAST(CAST(@xmlMuutuja AS NVARCHAR(MAX)) AS VARCHAR(MAX))

reede, 27. juuli 2012

IIS veebiserveri SK sertifikaadid ID-kaardiga autentimiseks

Selleks, et ASP.NET Request.ClientCertificate peale hakkaks IIS7 veebirakenduses koos SK poolt antud veebiserveri sertifikaadiga küsima ka Eesti ID-kaardi PIN koodi ei piisa ainult sellest, kui oled Sertifitseerimiskeskuse veebiserveri sertifikaadid paigaldanud nii nagu nõutud vaid tuleb ka Intermediate Certification Authorities lisada  ESTEID-SK 2011 ja EE Certification Centre Root CA sertifikaat

Kogu vajalik sertifikaatide majandus IIS7/IIS6 peal on siis järgmine:

Ava serveri käsurealt mmc Microsoft Management Console ja menüüs File -> Add/remove Snap-In lisa Certificates (Local Computer)

Trusted Root Certification Authorities:
(SK repo kodulehelt http://www.sk.ee/repositoorium/sk-sertifikaadid/ sertifikaadid Juur-SK ja EE Certification Centre Root CA )



Intermediate Certification Authorities:
(SK repo kodulehelt http://www.sk.ee/repositoorium/sk-sertifikaadid/ sertifikaadid ESTEID-SK 2011 ja KLASS3-SK 2010 )
IIS-is tuleb ASPX lehe Features View peal ära määrata SSL seadetes kas aktsepteerida või nõuda kliendi sertifikaati ja veebilehe code-behind võiks välja näha selliselt:



if (!Page.IsPostBack)
{
    HttpClientCertificate sert = Request.ClientCertificate; //küsib kliendi sertifikaati(PIN koodi aken tuleb ette)
    if (sert.IsPresent) //kas sai sertifikaadi kätte
    {
        if (System.DateTime.Now < sert.ValidUntil) //kas kliendi sertifikaat on kehtiv
        {   //tee nüüd midagi kättesaadud infoga sertifikaadilt


NB! Kui tekib probleem "vanade" uuendamata sertifikaatidega ID-kaartide kasutamisel, ehk peale PIN koodi sisestamist ilmub näiteks Firefoxil veateade



The page requires a valid SSL client certificate

Your client certificate is untrusted or invalid. A Secure Sockets Layer (SSL)client certificate is used for identifying you as a valid user of the resource.
HTTP Error 403.16 - Forbidden: Client certificate is ill-formed or is not trusted by the Web server.
Internet Information Services (IIS)


Siis tuleb Intermediate Certificates Authorities laadida ka ESTEID-SK 2007.













esmaspäev, 11. juuni 2012

httpCookies domain


Kui saad ASP.NET rakenduse paigaldamisel sellise veateate:


Validation of viewstate MAC failed.  If this application is hosted by a Web Farm or cluster,
 ensure that <machineKey> configuration specifies the  same validationKey and validation algorithm.
 AutoGenerate cannot be used in a cluster

Siis põhjuseks võib olla ka see, et web.config failis on http küpsisele seatud peale domeeni piirang

<httpCookies httpOnlyCookies="true" domain="www.minuveeb.ee" />

ja see piirang ei pruudi kokku langeda veebiserveri sertifikaadiga https protokolli jaoks(pole õige)

httpCookie domain piirab ära mis domeenil veebirakenduse küpsist kasutada saab mis annab täiendava kaitse seansirünnakute vastu


esmaspäev, 2. aprill 2012

Räsitabeli kollisioonirünnaku kõrvalmõjud, MS11-100 värskendus

Räsitabeli kollisioonirünnaku turbepaketi MS11-100 kõrvalmõjuna ei pruugi ASP.NET rakendused
enam töötada nii nagu varem, ilmsiks võib see tulla "pikkade nimekirjadega" veebilehtede puhul kus peale turbevärskenduse paigaldamist enam asjad endist viisi ei tööta
Põhjuseks see, et POST parameetrite võtmepaaride arvule on pandud piirang peale.

http://support.microsoft.com/kb/2661403

Käima saab asjad jälle nii, et tuleb web.config failis aspnet:MaxHttpCollectionKeys väärtust suurendada, vaikimisi on see 1000

<configuration>
  <appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="1000" />
  </appSettings>
</configuration>
 JSON deserialiseerimise korral on parameetriks
aspnet:MaxJsonDeserializerMembers
Rünnaku matemaatika on kirjeldatud Crosby ja Wallachi poolt aastal 2003
http://www.cs.rice.edu/~scrosby/hash/CrosbyWallach_UsenixSec2003.pdf

neljapäev, 12. jaanuar 2012

AntiXSS 4.2 teegi uuendamisprobleem

Võib juhtuda, et AntiXSS library 4.2 mis 10.jaanuaril 2012 veaparandusteatega välja tuli hakkab rakenduses peale värskendamist kisama:
..AntiXSS ..  The located assembly's manifest definition does not match the assembly reference ..
ja probleemist ei saa lahti ei viidete(reference) eemaldamise ega värskendamisega

Üks veapõhus võib olla see, et teegi seadetes































on faili Original filename AntiXSSLibrary40.dll aga fail ise ketta peal AntiXSSLibrary.dll.
Kui muu ei aita nimeta fail ümber AntiXSSLibrary40.dll - ks, värskenda viited, saad veateatest lahti ja rakendus töötab edasi