SharePoint Security Fundamentals Primer / Evitare i trabocchetti comuni

AGGIORNAMENTO 12/18/07: Vedere l'articolo di Paul Liebrand per alcune conseguenze tecniche di rimuovere o modificare i nomi di gruppo predefinito (vedere pure suo commento qui sotto).

Panoramica:

Protezione di SharePoint è facile da configurare e gestire. Tuttavia, ha dimostrato di essere difficile per alcuni amministratori prima volta davvero avvolgere le mani intorno ad esso. Non solo che, Ho visto alcuni amministratori di giungere ad una comprensione perfetta il lunedì solo per avere perso di venerdì perché non avevano alcuna configurazione nel frattempo. (Ammetto di avere questo problema io). Questo Blog speriamo che fornisce un utile primer di protezione di SharePoint e punti verso alcune procedure ottimali di configurazione.

Nota importante:

Questa descrizione si basa su out of the box di protezione di SharePoint. La mia esperienza personale è orientato intorno a MOSS, così ci possono essere alcune cose specifiche MOSS qui, ma credo che è preciso per WSS. Spero che chiunque vedendo eventuali errori o omissioni che verrà segnalare nei commenti o email me. Farò le correzioni fretta post.

Fondamenti:

Ai fini di questa panoramica, ci sono quattro aspetti fondamentali per la sicurezza: utenti/gruppi, oggetti a protezione diretta, ereditarietà e livelli di autorizzazione.

Utenti e gruppi break down to:

  • Singoli utenti: Tirato da active directory o creato direttamente in SharePoint.
  • Gruppi: Mappata direttamente da active directory o creati in SharePoint. I gruppi sono un insieme di utenti. I gruppi sono globali in una raccolta siti. Non sono mai "legati" per un oggetto a protezione diretta specifico.

Oggetti a protezione diretta rottura verso il basso per almeno:

  • Siti
  • Raccolte documenti
  • Singoli elementi in elenchi e raccolte documenti
  • Cartelle
  • Varie impostazioni BDC.

Ci altri oggetti a protezione diretta, ma si ottiene l'immagine.

Livelli di autorizzazione: Un fascio di granulare / diritti di accesso a basso livello che includono tali cose come creare, leggere o eliminare voci negli elenchi.

Ereditarietà: Per impostazione predefinita le entità ereditano le impostazioni di protezione dal loro oggetto contenente. Siti secondari ereditano l'autorizzazione dai propri genitori. Raccolte documenti ereditano dal loro sito. E così via.

Gli utenti e i gruppi si riferiscono agli oggetti a protezione diretta tramite livelli di autorizzazione e l'eredità.

Norme di sicurezza più importanti per capire, mai :

  1. I gruppi sono semplicemente raccolte degli utenti.
  2. I gruppi sono globali all'interno di una raccolta siti (vale a dire. non non c'è nessuna tale cosa come un gruppo definito a livello di sito).
  3. Nome del gruppo non sopportare, gruppi non, in e di se stessi, avere un livello specifico di sicurezza.
  4. Gruppi hanno sicurezza nel contesto di uno specifico oggetto a protezione diretta.
  5. È possibile assegnare livelli di autorizzazione diversi per lo stesso gruppo per ogni oggetto a protezione diretta.
  6. Criteri di applicazione Web vincente tutto questo (vedi sotto).

Gli amministratori della protezione ha perduti in un mare di annunci gruppo e utente possono sempre contare su questi assiomi per gestire e capire la loro configurazione di sicurezza.

Trabocchetti comuni:

  • I nomi dei gruppi falsamente implica l'autorizzazione: Out of the box, SharePoint definisce un insieme di gruppi i cui nomi implicano un livello intrinseco di sicurezza. Si consideri il gruppo di "Collaboratore". Uno sconosciuto con protezione di SharePoint può ben guardare quel nome e si supponga che ogni membro del gruppo può "contribuire" a qualsiasi sito/elenco/libreria nel portale. Questo può essere vero, ma non perché il nome del gruppo sembra essere "collaboratore". Questo è vero, fuori dalla scatola solo perché il gruppo è stato fornito un livello di autorizzazione che permette loro di aggiungere/modificare/eliminare contenuto nel sito radice. Tramite l'ereditarietà, i contribuenti"" gruppo può anche aggiungere/modificare/eliminare contenuto in ogni sub-sito. Uno può "spezzare" la catena di ereditarietà e cambia il livello di autorizzazione di un sito secondario tali che i membri del cosiddetto "contributore" gruppo non può contribuire a tutti, ma solo leggere (per esempio). Questo non sarebbe una buona idea, ovviamente, poiché sarebbe molto confusa.
  • Gruppi non definiti a livello di sito. È facile essere confusi dall'interfaccia utente. Microsoft fornisce un comodo collegamento a gestione utente/gruppo via "utenti e gruppi di ogni sito" link. È facile credere che quando io sono al sito "xyzzy" e creare un gruppo attraverso persone di xyzzy e gruppi di link che ho appena creato un gruppo che esiste solo a xyzzy. Che non è il caso. In realtà ho creato un gruppo per l'intera raccolta siti.
  • Appartenenza a gruppi non variano da sito (vale a dire. è lo stesso ovunque che il gruppo viene utilizzato): Si consideri il gruppo "proprietario" e due siti, "HR" e "Logistica". Sarebbe normale pensare che due individui separati sarebbero proprio quei siti — un proprietario di HR e un proprietario di logistica. L'interfaccia utente rende facile per un amministratore di sicurezza di maltrattare questo scenario. Se non ti conoscessi bene, Potrei accedere a persone e gruppi di link tramite il sito HR, selezionare i proprietari"" gruppo e aggiungere il mio proprietario di HR a tale gruppo. Un mese più tardi, Logistica arriva sulla linea. Accedere a persone e gruppi dal sito logistica, Aggiungi pull-up i proprietari"" gruppo. Vedo il proprietario HR c'e rimuovere il suo, pensando che lei sto rimuovendo dai proprietari con il sito di logistica. Infatti, Io la rimuovo dal gruppo globale proprietari. Segue ilarità.
  • Mancanza di nome ai gruppi basati sul ruolo specifico: Responsabili dell'approvazione"" il gruppo è un perfetto esempio. Che cosa può membri di approvare questo gruppo? Dove essi possano approvarlo? Voglio davvero dipartimento di logistica di persone di essere in grado di approvare i documenti HR? Certo che no. Sempre un nome ai gruppi in base al loro ruolo all'interno dell'organizzazione. Questo ridurrà il rischio che il gruppo viene assegnato un livello di autorizzazione non corretti per un determinato oggetto a protezione diretta. Gruppi di nome basati sul loro ruolo previsto. Nello scenario precedente HR/logistica, Io dovrei aver creato due nuovi gruppi: "HR proprietari" e i proprietari di logistica"" e assegnare livelli di autorizzazione sensata per ciascuno e l'importo minimo richiesto per gli utenti di fare il loro lavoro.

Altri riferimenti utili:

Se hai fatto questo lontano:

Per favore fatemi sapere cosa ne pensate attraverso i commenti o email me. Se conoscete altre buone referenze, si prega di fare lo stesso!

Technorati Tags:

Facile e veloce: Creare una Web Part visualizzazione dati (DVWP)

C'è una ricchezza di grandi informazioni su WSS 3.0 Web Part visualizzazione dati (DVWP) sul web da diverse fonti. Tuttavia, Mi è sembrato di essere sorprendentemente difficile trovare informazioni su questo primo fondamentale passo. Ecco un altro articolo nel "rapido e facile" serie per affrontarlo.

Segui questi passaggi per creare una web part Visualizzazione dati (DVWP). Sono basati su un "annunci" parte Web, ma si applicano alla maggior parte delle liste.

  1. Creare una web part di annunci e aggiungerlo a un sito.
  2. Aprire il sito in SharePoint Designer.
  3. Aprire default. aspx del sito.
  4. Selezionare la web part Annunci e fare clic destro.
  5. Dal menu contestuale, selezionare "convertire a XSLVisualizzazione dati T".

SharePoint Designer ti avvisa che questo sito è ora personalizzato dalla sua definizione di sito. Che non è necessariamente un male, ma vi sono importanti implicazioni (prestazioni, aggiornamento, gli altri) che sono oltre la portata di questo piccolo "veloce e facile" entrata. Per ottenere ulteriori informazioni su questo argomento, Mi raccomando entrambi i libri qui così come la ricerca Internet preferita.

Confermare che l'hai fatto correttamente:

  1. Chiudere e riaprire il browser web (per evitare accidentalmente ri-postando una nuova web part originale "add").
  2. Selezionare la freccia della web part a discesa e scegliere "modifica condivisa Web Part" dal menu.
  3. Il pannello degli strumenti si apre a destra.
  4. Il pannello è cambiato da sue solite opzioni set a questo:
immagine

“Non è possibile ottenere la proprietà elenco schema colonna nell'elenco di SharePoint” — descrizione/work-around

Questa settimana, abbiamo finalmente riprodotto un problema che era stato riferito da un utente remoto: Quando ha cercato di esportare il contenuto di un elenco di eccellere, le cose sembrano iniziare a lavorare, ma poi Excel sarebbe pop up un errore: "Non può ottenere la proprietà di colonna di elenco dello schema dall'elenco SharePoint". Lei era in esecuzione office 2003, Windows XP e la connessione a MOSS.

Ho cercato il Internets e ho visto alcune speculazioni ma niente 100% definitivo. Da qui, Questo post.

Il problema: Esportare una vista per excel che contiene una data (data = il tipo di dati della colonna).

Che cosa ha funzionato per noi: Convertire la data in "una sola riga di testo". Poi, convertire una data.

Che risolto. E ' stato bello vedere che la conversione lavorato, in realtà. E ' stato piuttosto nervoso che trasformando le cose in questo modo non, ma non ha.

Questo bug ha gettato un'ombra enorme sopra il tipo di dati date nella mente del cliente, così stiamo andando a essere alla ricerca di una risposta definitiva da Microsoft e speriamo che io post e aggiornare qui nel prossimo periodo breve di tempo con le loro informazioni di risposta e hotfix ufficiale.

Altri riferimenti:

http://www.kevincornwell.com/blog/index.php/cannot-get-the-list-schema-column-property-from-the-sharepoint-list/

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2383611&SiteID=1

<fine>

Iscriviti al mio blog.

Technorati Tags: ,

Semplice e veloce: Inviare una mail con collegamento ipertestuale incorporato dal flusso di lavoro SharePoint Designer

Una o due volte al mese, qualcuno invia una domanda forum: "Come io includere collegamenti ipertestuali a URL che sono cliccabili da una email di SharePoint Designer?"

Presentato senza ulteriori commenti: (bene, in realtà c'è ulteriore commento dopo l'immagine):

immagine

Becky Isserman segue con una spiegazione utile su come incorporare un collegamento a un elemento nell'email: http://www.sharepointblogs.com/mosslover/archive/2007/11/20/addition-to-paul-galvin-s-post-about-sending-an-e-mail-with-hyperlinks-in-spd.aspx

Nuova release: Estensioni del flusso di lavoro di SharePoint Designer (funzioni di manipolazione stringa)

AGGIORNAMENTO: Vedi qui i miei pensieri sulla commercializzazione di questo progetto: http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!569.entry

I've been impegnato a lavorare sul mio progetto Codeplex che attualmente è focalizzata sulla fornitura di stringa estensioni di manipolazione ai flussi di lavoro creati tramite SharePoint Designer.

Vedi qui per i dettagli:

Casa di progetto: http://www.codeplex.com/spdwfextensions

Rilascio: https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=spdwfextensions&ReleaseId=8280

Versione 1.0 include le seguenti nuove funzionalità:

Funzione Descrizione (Se non lo stesso come.Funzione netto)
Num-entries() Restituisce il numero "voci" in una stringa secondo un delimitatore specificato.

Per esempio: Num-voci in una stringa "un,b,c" con delimitatore"," = 3.

Voce() Restituisce il token n-esimo di una stringa secondo un delimitatore specificato.
Lunghezza String. length
Sostituire() Replace()
Contiene() Contains()
Restituisce la parola "true" o la parola "false".
Sottostringa(Start) Substring(Start)
Sottostringa(Start,lunghezza) Substring(Start,lunghezza)
ToUpper() ToUpper()
ToLower() ToLower()
StartsWith() String. StartsWith()
Restituisce la parola "true" o la parola "false".
EndsWith() String. EndsWith()
Restituisce la parola "true" o la parola "false".

Un errore di runtime BDC spiegato

Mi ha causato un errore di BDC questa settimana che si è manifestata nell'interfaccia utente e nella 12 registro dell'alveare in fase di esecuzione.

Primo, Questa apparve nell'interfaccia utente:

Non riusciva a trovare campi per inserire tutti i valori dell'identificatore per eseguire correttamente una SpecificFinder MethodInstance con nome … Controllare che i parametri di input includano TypeDescriptor associati a ogni identificatore definito per questa entità.

Ecco una schermata:

clip_image001

Potuto anche causare questo messaggio a comparire nella 12 registro dell'alveare a sarà (usando il mio high-tech-don't-try-this-at-home brevettato "misteriosi Errori" Metodo.):

11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C dati di SharePoint Portal Server Business 6q4x alta eccezione in BusinessDataWebPart.OnPreRender: System. InvalidOperationException: Il valore dell'identificatore ”, di tipo ”, non è valido. Valore previsto identificatore di tipo 'System. String'. a Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Oggetto[] subIdentifierValues, LobSystemInstance lobSystemInstance) a Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Entità di entità, Oggetto[] userValues, LobSystemInstance lobSystemInstance) a Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(Vista desiredView) a Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() a Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()

Ho cercato in giro e trovato qualche porta nella Forum MSDN, ma non erano abbastanza per me per capire quello che stavo facendo sbagliato. Ho guardato un webcast di Ted Pattison che il mio azienda ha squirreled lontano su un server ed è venuto a realizzare il mio problema.

Nel mio ADF, Connettersi a un database SQL come illustrato:

            <Proprietà Nome="RdbCommandText" Tipo="System. String">
              <![CDATA[
                SELEZIONARE SETID, CARRIER_ID, EFFDT, DESCR, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
                      PAESE, INDIRIZZO1, INDIRIZZO2, INDIRIZZO3, INDIRIZZO4, CITTÀ, NUM1, NUM2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
                      CONTEA DI, STATO, POSTALE, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, TELEFONO, ESTENSIONE, FAX, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
                      INTERLINK_DLL, TMS_EXCLUDE_FLG da dbo.PS_CARRIER_ID_VW con (NOLOCK)
                DOVE
                  (SETID <> 'PARTI') e
                  (inferiore(CARRIER_ID) >= bassa(@MinId)) e
                  (inferiore(CARRIER_ID) <= bassa(@ MaxId)) e
                  (inferiore(DESCR) COME inferiore(@InputDescr))
                ]]>
            </Proprietà>

Mi è stato fornito che SQL da una persona DBA e sono fatto capire che è un speciale vista che hanno creato solo per me. La chiave univoca c'è CARRIER_ID.

Ecco il bug che introdotto:

      <Identificatori>
        <Identificatore Nome="CARRIER_ID" TypeName="System. String" />
        <Identificatore Nome="DESCR" TypeName="System. String" /> 
</Identificatori>

Da qualche parte lungo la linea, Ero riuscito a confondere me stesso sopra il significato del <Identificatori> e aggiunto DESCR, anche se non è in realtà un identificatore. Ho preso DESCR fuori il set di identificatori e presto! E tutto ha funzionato.

Spero che questo salvi qualcuno un po 'di dolore 🙂

Technorati Tags: , , ,

Non si può battere Reach di SharePoint

Durante gli ultimi due giorni, Ho partecipato a due incontri durante i quali abbiamo presentato i risultati di un progetto SharePoint. Il CIO e il suo team si unì alla prima riunione. Che è standard e non particolarmente degno di nota. Il reparto IT è ovviamente coinvolto in un'implementazione di enterprise di qualsiasi progetto di tecnologia. Il secondo incontro ampliato per includere un valtolina. dal marketing, diversi registi che rappresentano HR, Logistica, Produzione, Progetti d'investimento, Qualità, L'acquisto di, Sviluppo azienda e altri reparti (alcuni dei quali non erano direttamente coinvolti nella fase attuale). Che è un possente vasto pubblico.

Nella mia vita precedente, Ho lavorato principalmente su progetti ERP e CRM. Entrambi hanno un dominio di soluzione abbastanza ampia ma non così ampia come SharePoint. Essere pienamente realizzato, Progetti SharePoint legittimamente e necessariamente raggiungono in ogni angolo e fessura di un'organizzazione. Come molte altre soluzioni di enterprise hanno di che tipo di raggiungere? Non ci sono molti.

SharePoint rappresenta chiaramente un'enorme opportunità per quelli di noi abbastanza fortunati da essere in questo spazio. Esso fornisce una grande opportunità tecniche (che è in qualche modo capovolto qui sotto "Tecnologie deve padroneggiare"). Ma ancora meglio, SharePoint ci espone a una gamma ampia e vasta dei processi di business attraverso questi impegni. Quanti CRM specialisti lavorano con il lato di produzione dell'azienda? Quanti ERP consulenti collaborano con risorse umane all'acquisizione di talenti? SharePoint supera entrambi.

Qualcosa come, non è perfetto, ma è un dannato buon posto per essere.

Per amore di [Riempa tuo più amato essere persona/superiore], non cambiare il ' titolo’ colonna del sito.

Sulla Forum di SharePoint, ogni tanto qualcuno chiede di "cambiare l'etichetta del titolo" o circa "rimozione titolo dalle liste".

Linea di fondo: Non farlo!

Purtroppo, l'interfaccia utente consente un cambiamento unidirezionale di tale etichetta di colonna, come mostrato:

immagine

Si intitola una colonna associata alla voce"" tipo di contenuto. Molti, molti, molti di CT utilizzare questa colonna e se cambiarla qui, esso ripples ovunque. C'è una buona probabilità che non intendete che ciò accada. Probabilmente eri pensare a te stesso, "Ho una lista di ricerca personalizzato e ' titolo’ semplicemente non ha senso come un nome di colonna, così ho intenzione di cambiarlo in ' codice di stato’ e aggiungere una colonna di descrizione." Ma se si seguono su quel pensiero e rinominare ' titolo’ a 'Codice di stato', titolo di ogni lista (tra cui le raccolte documenti) modifiche al codice di stato"" e tu probabilmente non intendo per quel che accada.

Il vero problema è che questo è un cambiamento unidirezionale. L'interfaccia utente "sa" quel titolo"" è una parola riservata. Così, Se si tenta di modifica il codice di stato"" Torna a "Title", si eviterà, e ora hai dipinta da soli in un angolo using paint that never dries 🙂

Che cosa succede se già cambiato? Non ho visto la risposta che tutti noi vogliamo, che è un metodo semplice e facile per modificare l'etichetta di 'Titolo'. Subito, il miglior consiglio è di cambiarlo a qualcosa come "Doc/elemento Title". Che è un'etichetta abbastanza generica che non può essere troppo fastidioso per gli utenti.

Ho poche altre idee che sono sulla mia lista di cose da fare delle cose alla ricerca:

  • Contattare Microsoft.
  • Fare qualcosa con il modello a oggetti, forse in concomitanza con una caratteristica.
  • Capire lo schema del database e aggiornare manualmente SQL. (Prima di fare questo però dovresti contattare Microsoft; esso probabilmente invalidare il vostro contratto di supporto).

Se qualcuno sa come risolvere questo problema, si prega di inviare un commento.

Aggiornamento tardo pomeriggio, 11/15: Ho trovato questo link che descrive un metodo per la creazione di un tipo di elenco che non dispone di una colonna di titolo: http://www.venkat.org/index.php/2007/09/03/how-to-remove-title-column-from-a-custom-list/

ADF BDC e il tuo amico, CDATA

Ho notato qualche goffo e inutile mano codifica di RdbCommandText in alcuni esempi (compresa la documentazione MSDN).

Volevo segnalare ai nuovi arrivati a BDC che comandi possono essere incapsulati all'interno di un tag CDATA in loro naturale"" modulo. Così, Questa costruzione scomoda:

<Proprietà Nome="RdbCommandText" Tipo="System. String">
SELECT dbo.MCRS_SETTLEMENT.ID, dbo.MCRS_SETTLEMENT.Settlement from dbo.MCRS_SETTLEMENT
DOVE (Identificazione &gt;= @ MinId) E (Identificazione &lt;= @ MaxId)
</Proprietà>

può essere meglio rappresentato in questo modo:

<Proprietà Nome="RdbCommandText" Tipo="System. String">
<![CDATA[
SELECT dbo.MCRS_SETTLEMENT.ID, dbo.MCRS_SETTLEMENT.Settlement from dbo.MCRS_SETTLEMENT
DOVE (Identificazione >= @ MinId) E (Identificazione <= @ MaxId)
]]>
</Proprietà>

</fine>

BDC Primer

Intro a BDC

Esempio funzionale: ADF BDC che si connette a un database SQL con incorporati user id e password

Avevo bisogno di cablare MOSS a un database SQL tramite BDC. Per scopi di test/POC, Ho voluto incorporare il SQL account user id e la password nel file ADF. A partire da Questo modello (http://msdn2.microsoft.com/en-us/library/ms564221.aspx), Ho creato un file ADF connesso a una particolare istanza di SQL server e i log in con una specifica user id e password e mostrato in questo frammento:

  <LobSystemInstances>
    <LobSystemInstance Nome="ClaimsInstance">
      <Proprietà>
        <Proprietà Nome="AuthenticationMode" Tipo="System. String">Pass-through</Proprietà>
        <Proprietà Nome="DatabaseAccessProvider" Tipo="System. String">SqlServer</Proprietà>
        <Proprietà Nome="Origine dati RdbConnection" Tipo="System. String">istanza effettivo serveractual</Proprietà>
        <Proprietà Nome="RdbConnection Initial Catalog" Tipo="System. String">Catalogo iniziale effettivo</Proprietà>
        <Proprietà Nome="Protezione integrata RdbConnection" Tipo="System. String">SSPI</Proprietà>
        <Proprietà Nome="RdbConnection pool" Tipo="System. String">falso</Proprietà>

        <!-- Questi sono i valori chiavi: -->
        <Proprietà Nome="RdbConnection User ID" Tipo="System. String">unctual User ID</Proprietà>
        <Proprietà Nome="RdbConnection Password" Tipo="System. String">Password attuale</Proprietà>
        <Proprietà Nome="RdbConnection Trusted_Connection" Tipo="System. String">falso</Proprietà>

      </Proprietà>
    </LobSystemInstance>
  </LobSystemInstances>

Non è una best practice, ma è utile per una configurazione rapida e semplice per il test. Questo è stato sorprendentemente difficile da capire. Non ho mai trovato un esempio funzionale con parole chiave di ricerca:

  • ADF incorporato userid e password
  • incorporare l'id utente e la password nel file adf
  • incorporare user id e password nel file adf bdc
  • SharePoint bdc iniettore
  • SharePoint incorporare user id e password nel file adf

</fine>

Iscriviti al mio blog.